我正在编写一个Android应用程序来与实时服务器上的用户数据库进行交互。我目前正在开展“注册用户”活动,根据他们在编辑文本字段中输入的信息,该活动应该只是将用户添加到数据库中。
我正在使用Android的Volley Library来完成此任务,使用简单的字符串请求。然后将请求添加到请求队列。我能够连接并从服务器获得响应,但是当我尝试更新数据库(添加用户)时,没有任何反应。
我理解在使用method = POST(我的服务器所做的)时,必须覆盖指定键/值对的getParams()方法(其中KEY是来自php脚本的post数据,值是新数据)。 )
我尝试将我的请求队列实现为单例类,创建自定义标头,甚至尝试将volley的方法从POST修改为'DEPRECATED_GET_OR_POST'而没有运气。如果有人能告诉我我做错了什么或者缺少什么,那就非常感激。
这是我的代码:
//url to the registration page (on the server)
private static final String Register_URL = "http://www.wupx.com/arcums/profile/register.php";
//key values (these are the values in the DB)
public static final String Key_Username = "username";
public static final String Key_Realname = "name";
public static final String Key_Password = "password2";
public static final String Key_Email = "email";
//declare the editText field & Button
private EditText editTextUsername;
private EditText editTextName;
private EditText editTextEmail;
private EditText editTextPassword;
private EditText editTextPassword2;
private Button buttonRegister;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
//reference editText fields and buttons
editTextUsername = (EditText) findViewById(R.id.editTextUserName);
editTextName = (EditText) findViewById(R.id.editTextRealName);
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
editTextPassword2 = (EditText) findViewById(R.id.editTextPasswordAgain);
buttonRegister = (Button) findViewById(R.id.registerButton);
buttonRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
registerUser();//calls the registerUser method.
}
});
}
//method to add user to the arcums database
private void registerUser() {
//print textview contents to logcat (debugging)
Log.d("log message", "entering register User method");
//values passed in from the user
final String Username = editTextUsername.getText().toString().trim();
final String Name = editTextName.getText().toString().trim();
final String Password = editTextPassword.getText().toString().trim();
final String Password2 = editTextPassword2.getText().toString().trim();
final String Email = editTextEmail.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, Register_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// put a toast here
Toast.makeText(register.this, R.string.register_response , Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error toast
Toast.makeText(register.this, R.string.register_error, Toast.LENGTH_SHORT).show();
}
}){
//returns a hashmap with key value pairs
@Override
protected Map<String,String> getParams(){
Map<String, String> params = new HashMap<String, String>();
params.put(Key_Username, Username);
params.put(Key_Realname, Name);
params.put(Key_Password, Password2);
params.put(Key_Email, Email);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
这是php myadmin中我的数据库值的截图: DB values
请注意,并非所有字段都需要填写才能添加到数据库中 - 只需要名称,用户名,电子邮件和密码。
服务器本身没有GUI,所以我现在无法发布PHP代码。我希望有人可以帮助我们提供的信息!