在Java Android应用程序中更改PHP代码后立即跳过“捕获”

时间:2017-07-08 10:13:56

标签: java php android mysqli

所以我一直在玩我的移动应用程序,它应该让我注册帐户并登录,同时从我创建的数据库中获取一些数据。一切都很好,花花公子,直到我更改了我的register.php文件,检查登录是否已经采取并相应地采取行动。我认为我的JSONObject和响应有问题,所以我尝试使用字符串而不是布尔值,但程序仍然只进入JSONObject的try部分jsonResponse = new JSONObject(response);然后立即进入代码的catch部分。我没有太大改变,说实话,我说我现在编写的代码比之前编写的代码更清晰,但它无法正常工作。

当我点击“Zarejestruj”按钮(抛光注册)时,应该将数据发送到数据库(这会发生,但我可以出于某种原因添加无限量的相同登录)并且活动应该返回到LoginActivity.java但它没有,它只是将凭证发送到数据库并保持在那里无限,同时允许我垃圾邮件bRegister。

这是java代码:

attrs = [:first, :second, :third, :fourth, :fifth]

attrs.each_with_index do |attr, ix|
  i = ix + 1  # indexes are zero based, we need to adjust them

  report.send "#{attr}=", Calculate(i.to_s)

  if i.even?
    make_correction(report, attr) if require_correction
  end
end

这是我的Register.php文件:

public class RegisterActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    Log.d("RA", "Zmienne");
    final EditText etName = (EditText) findViewById(R.id.etName);
    final EditText etSurame = (EditText) findViewById(R.id.etSurname);
    final EditText etLogin = (EditText) findViewById(R.id.etLogin);
    final EditText etPassword = (EditText) findViewById(R.id.etPassword);
    final EditText etGroupNumber = (EditText) findViewById(R.id.etGroupNumber);
    final EditText etIndexNumber = (EditText) findViewById(R.id.etIndexNumber);

    final Button bRegister = (Button) findViewById(R.id.bRegister);
    Log.d("RA", "Po zmienncyh");

    bRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final String name = etName.getText().toString().trim();
            final String surname = etSurame.getText().toString().trim();
            final String login = etLogin.getText().toString().trim();
            final String password = etPassword.getText().toString().trim();
            final String groupNumber = etGroupNumber.getText().toString().trim();
            final String indexNumber = etIndexNumber.getText().toString().trim();



            Log.d("RA", "Przed wywołąniem responseListener");
            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("RA", "Response");
                    Log.d("RA", response);
                    Log.d("RA", "onResponse");
                    try {
                        Log.d("RA", "Try");
                        JSONObject jsonResponse = new JSONObject(response);
                        Log.d("RA", "ObiektResponse");
                        String success = jsonResponse.getString(response);
                        if (success == "success") {
                            Log.d("RA", "Success");
                            Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                            RegisterActivity.this.startActivity(intent);

                        } else {
                            Log.d("RA", "Error");
                            AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                            builder.setMessage("Register Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();
                        }
                    } catch (JSONException e) {
                        Log.d("RA", "catch");
                        e.printStackTrace();
                    }
                }
            };
            Log.d("RA", "Wykonało się");
            RegisterRequest registerRequest = new RegisterRequest(name, surname, login, password, groupNumber, indexNumber, responseListener);
            Log.d("RA", "queue");
            RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
            Log.d("RA", "registerRequest");
            queue.add(registerRequest);
            Log.d("RA", "Koniec");
        }
    });
}}

2 个答案:

答案 0 :(得分:2)

问题出在这一行:

{"success":true}

您的JSON字符串是:

response

解析这将创建一个带有一个键/值对的JSONObject:&#34;成功&#34; =布尔值为真

你在这里尝试做的是获取键{"success":true}的字符串值(这是完整的jsonResponse.getString("success")字符串,它不作为JSONObject中的键存在) 。相反,您应该使用getString(),因为&#34;成功&#34;实际上是你感兴趣的关键。

但是,由于它实际上是布尔值而不是字符串,因此您不应使用getBoolean(),而应使用boolean success = jsonResponse.getBoolean("success"); 代替:

if

这也将对您的以下if (success == "success") { 语句产生影响:

if (success) {

应该成为:

success

(因为true现在是布尔值false<table> <tr *ngFor="let booking of jobHistory> <td>{{booking}}</td> </tr> </table> )。

答案 1 :(得分:0)

您可能希望尝试将mysqli->prepare()的返回值分配给变量,并在继续执行实际的数据库操作之前测试返回true。使用try / catch方法可能有助于确定php中是否存在问题。

ini_set('display_errors', 'On');
require("Password.php");

try{

    $mysqli = new mysqli( "localhost", "id2147309_javaprojekt123", "javaprojekt321", "id2147309_javaprojekt" );

    if( $mysqli->connect_errno ){
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    if( isset( $_POST["name"], $_POST["surname"], $_POST["login"], $_POST["password"], $_POST["groupNumber"], $_POST["indexNumber"] ) ){
        $name = $_POST["name"];
        $surname= $_POST["surname"];
        $login = $_POST["login"];
        $password = $_POST["password"];
        $groupNumber = $_POST["groupNumber"];
        $indexNumber = $_POST["indexNumber"];
    }


    function registerUser(){
        global $mysqli, $name, $surname, $login, $password, $groupNumber, $indexNumber;
        $passwordHash = password_hash($password, PASSWORD_DEFAULT);

        $stmt = $mysqli->prepare("INSERT INTO `user` ( `name`, `surname`, `login`, `password`, `groupNumber`, `indexNumber` ) VALUES (?, ?, ?, ?, ?, ?)");

        if( $stmt ){
            $stmt->bind_param( "ssssss", $name, $surname, $login, $passwordHash, $groupNumber, $indexNumber );
            $stmt->execute();
            $stmt->close();
            return true;
        } else {
            throw new Exception( 'Failed to prepare sql query in: ' . __FUNCTION__ );
        }
        return false;
    }
    function usernameAvailable(){
        global $mysqli, $login, $count;
        $sql = 'SELECT * FROM `users` WHERE `login` = ?';
        $stmt=$mysqli->prepare( $sql );

        if( $stmt ){
            $stmt->bind_param("s", $login);
            $stmt->execute();
            $stmt->store_result();
            $count = $stmt->num_rows;
            $stmt->close();
        } else {
            throw new Exception( 'Failed to prepare sql query in: ' . __FUNCTION__ );
        }
        return $count==0 ? true : false;
    }


    $available = call_user_func('usernameAvailable');
    $response = $available ? call_user_func('registerUser') : false;
    $mysqli->close();

    echo json_encode( $response );

}catch( Exception $e ){
    echo json_encode( array(
        'success'   =>  false,
        'Exception' =>  $e->getMessage()
    ));
}