我正在创建一个按钮,单击该按钮会调用checkUserName
方法,该方法搜索数据库并告知用户名是否可用。 URL_CHECK_USERNAME
回复“用户名可用”或“用户名不可用”。
public void checkUserName(View v){
String username = inputUserName.getText().toString().trim();
new CheckUsername().execute(username);
}
class CheckUsername extends AsyncTask<String, String, String>{
String r = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(RegisterActivity.this);
pDialog.setMessage("Checking Availability of this Username...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
//String r = null;
final String username = params[0];
StringRequest strReq = new StringRequest(Method.POST,
AppConfig.URL_CHECK_USERNAME, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
r = response;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e(TAG, "Error in checking username." + volleyError.getMessage());
Toast.makeText(getApplicationContext(), volleyError.getMessage(), Toast.LENGTH_SHORT).show();
hideDialog();
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> param = new HashMap<>();
//param.put("username", params[0]);
param.put("username", username);
return param;
}
};
AppController.getInstance().addToRequestQueue(strReq);
return r;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pDialog.dismiss();
Toast.makeText(RegisterActivity.this, s, Toast.LENGTH_SHORT).show();
}
}
此程序每次都显示一个空的Toast。可能是什么问题?
答案 0 :(得分:1)
从您发布的代码中我假设您使用Volley作为您的网络库。 如果是这种情况你应该知道你不需要那个Asynctask,因为Volley会为你处理线程。
请求将在后台执行,回调将异步调用。这就是为什么你的祝酒词是空的。
在checkUsername(View)方法中创建StringRequest,并在onResponse回调中显示toast。