我一直在研究这个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();
?>
答案 0 :(得分:0)
你知道的是什么......我在Genymotion中尝试过(我使用AS默认模拟器运行它)并且它有效!
现在,我不知道为什么它没有在默认模拟器上...