我正在尝试在一个应用程序中设置一个简单的注册用户,最终将允许用户搜索本地乐队和他们所演奏的场地。
在输入注册信息的位置,单击“注册”,然后返回登录页面。尝试将应用程序与数据库链接后,单击“注册”按钮不会执行任何操作,除非我注释掉onClick方法的“ Response.Listener responseListener = new Response.Listener()”部分。
所以,似乎我没有收到Register.php的回复。(?)
当我注释掉onClick方法的“ Response.Listener responseListener = new Response.Listener()”部分时,我可以使事情发生。因此,这就是为什么我认为我已将问题范围缩小到该部分代码。
我的Registeractivity类:
public class Registeractivity extends AppCompatactivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
final EditText etName = findViewById(R.id.text_register_name);
final EditText etusername = findViewById(R.id.text_register_username);
final EditText etPassword = findViewById(R.id.text_register_password);
final Button btnRegister = findViewById(R.id.btn_register);
btnRegister.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View v) {
final String name = etName.getText().toString();
final String username = etusername.getText().toString();
final String password = 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,Mainactivity.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();
}
}
};
RegisterRequest registerRequest = new RegisterRequest(name,username,password,responseListener);
RequestQueue queue = Volley.newRequestQueue(Registeractivity.this);
queue.add(registerRequest);
}
});
}
我的RegisterRequest类:
public class RegisterRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "http://bandsearch.000webhostapp.com/public_html/Band/Register.php";
private Map<String,String> params;
public RegisterRequest (String name,String username,String password,Response.Listener<String> listener) {
super(Method.POST,REGISTER_REQUEST_URL,listener,null);
params = new HashMap<>();
params.put("name",name);
params.put("username",username);
params.put("password",password);
}
@Override
protected Map<String,String> getParams() throws AuthFailureError {
return params;
}
我的Register.php:
<?php
ini_set('error_reporting',E_ALL);
ini_set('display_errors',true);
$connect = mysqli_connect('localhost','id11439356_btpeters','demopass','id11439356_localmusic');
// $name = "Brent"; //$_POST['name'];
// $username = "Vegasbrent"; //$_POST['username'];
// $password = "pass"; //$_POST['password'];
$name = $_POST['name'];
$username = $_POST['username'];
$password = $_POST['password'];
$statement = mysqli_prepare($connect,"INSERT INTO user (name,password) VALUES (?,?,?)");
mysqli_stmt_bind_param($statement,"sss",$name,$username,$password);
mysqli_stmt_execute($statement);
$response = array();
$response["success"] = false;
if (mysqli_query($connect,$statement)) {
$response["success"] = true;
}
echo json_encode($response);
?>
我希望单击“注册”按钮时应用程序将返回到登录页面,但是单击“注册”按钮不会执行任何操作。
编辑:我相信我已经将问题进一步缩小到$ _POST部分:
$name = $_POST['name'];
$username = $_POST['username'];
$password = $_POST['password'];
如果将变量设置为字符串而不是$ _POST [...],则可以添加到数据库的用户表中。它可能与getParams方法有关,因为我从不调用它。我以为它在某个地方被自动调用了。我会检查一下,看看是否可以解决!尽管如此,我们将提供任何帮助!
编辑:Volley自动调用getParams方法。现在尝试弄清楚如何检查Volley是否调用了getParams方法!