可以在doInBackground()方法中创建StringRequest吗?

时间:2016-02-26 20:47:46

标签: java android android-asynctask android-volley

我正在创建一个按钮,单击该按钮会调用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。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

从您发布的代码中我假设您使用Volley作为您的网络库。 如果是这种情况你应该知道你不需要那个Asynctask,因为Volley会为你处理线程。

请求将在后台执行,回调将异步调用。这就是为什么你的祝酒词是空的。

在checkUsername(View)方法中创建StringRequest,并在onResponse回调中显示toast。