无法向数据库发送和检索数据(PHP / MySQL / Android)

时间:2016-06-06 16:27:59

标签: php android mysql

我一直在研究这个PHP-MySQL-Android登录系统,在调试了一些代码问题之后,似乎我得到了PHP代码,可以成功地与数据库进行通信。我确认通过PostMan,我能够输入数据并检索它(运行寄存器和登录php文件)。

但是,从Android Studio中的应用程序运行我无法执行此操作。它不会给我代码错误并且运行正常,但是,由于某种原因,数据不会进入数据库。如果我手动向其插入数据,然后尝试使用应用程序登录,它也不会起作用。我可能遗漏了一些基本的东西,我无法亲眼看到。任何人都可以帮助我在哪里以及如何看待它以查看可能出现的问题?再次,使用PostMan,我能够使用当前的php文件注册和登录,这是否意味着我的问题在Android Studio的Java代码中是100%的?

谢谢大家!

这是我的RegisterActivity和RegisterRequest:

public class RegisterRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "my url is here";
private Map<String, String> params;

public RegisterRequest(String username, String email, String passcode, Response.Listener<String> listener) {
    super(Method.POST, REGISTER_REQUEST_URL, listener, null);
    params = new HashMap<>();

    params.put("username", username);
    params.put("email", email);
    params.put("passcode", passcode);
}

@Override
public Map<String, String> getParams() {
    return params;
}
}


public class RegisterActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(layout.activity_register);


    final EditText etEmail = (EditText) findViewById(id.etEmail);
    final EditText etUsername = (EditText) findViewById(id.etUsername);
    final EditText etPassword = (EditText) findViewById(id.etPassword);
    final Button bRegister = (Button) findViewById(id.bRegister);

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

            final String username = etUsername.getText().toString();
            final String email = etEmail.getText().toString();
            final String passcode = etPassword.getText().toString();

            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        if (success) {
                            Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                            RegisterActivity.this.startActivity(intent);
                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                            builder.setMessage("Register Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        System.out.println("OMG");
                    }
                }
            };

            RegisterRequest registerRequest = new RegisterRequest(username, email, passcode, responseListener);
            RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
            queue.add(registerRequest);
        }
    });
}
}

这是我的LoginRequest和LoginActivity:

public class LoginRequest extends StringRequest {
private static final String LOGIN_REQUEST_URL = "my url is here";
private Map<String, String> params;

public LoginRequest(String username, String passcode, Response.Listener<String> listener) {
    super(Method.POST, LOGIN_REQUEST_URL, listener, null);
    params = new HashMap<>();
    params.put("username", username);
    params.put("passcode", passcode);
}

@Override
public Map<String, String> getParams() {
    return params;
}
}


public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    final EditText etUsername = (EditText) findViewById(R.id.etUsername);
    final EditText etPassword = (EditText) findViewById(R.id.etPassword);
    final TextView tvRegisterLink = (TextView) findViewById(R.id.tvRegisterLink);
    final Button bLogin = (Button) findViewById(R.id.bSignIn);

    tvRegisterLink.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
            LoginActivity.this.startActivity(registerIntent);
        }
    });

    assert bLogin != null;
    bLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String username = etUsername.getText().toString();
            final String passcode = etPassword.getText().toString();

            // Response received from the server
            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");

                        if (success) {
                            String username = jsonResponse.getString("username");
                            String email = jsonResponse.getString("email");

                            Intent intent = new Intent(LoginActivity.this, UserAreaActivity.class);
                            intent.putExtra("username", username);
                            intent.putExtra("email", email);
                            LoginActivity.this.startActivity(intent);
                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                            builder.setMessage("Login Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            };

            LoginRequest loginRequest = new LoginRequest(username, passcode, responseListener);
            RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
            queue.add(loginRequest);
        }
    });
}
}

这是我的Register.php:

<?php
$servername = "my server is here";
$username = "my username";
$password = "my password";
$dbname = "my db";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO User (username, email, passcode) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $email, $passcode);

$username = $_POST["username"];
$email = $_POST["email"];
$passcode = $_POST["passcode"];

$stmt->execute();

$response = array();
$response["success"] = true;

echo json_encode($response);

$stmt->close();
$conn->close();   



?>

这是我的Login.php:

<?php
$servername = "my server is here";
$username = "my username";
$password = "my password";
$dbname = "my db";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

$username = $_POST["username"];
$passcode = $_POST["passcode"];

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("SELECT * FROM User WHERE username = ? AND passcode = ?");
    $stmt->bind_param("ss", $username, $passcode);

$stmt->execute(); 

mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt, $userID, $username, $email, $passcode);


 $response = array();
 $response["success"] = false;

while(mysqli_stmt_fetch($stmt)){
    $response["success"] = true;  

    $response["username"] = $username;
    $response["passcode"] = $passcode;
}


echo json_encode($response);

$stmt->close();
$conn->close();


?>

1 个答案:

答案 0 :(得分:0)

你知道的是什么......我在Genymotion中尝试过(我使用AS默认模拟器运行它)并且它有效!

现在,我不知道为什么它没有在默认模拟器上...