android - Volley 没有第二次调用 getParams()

标签 android android-volley

我正在尝试使用 Android 中的 Volley 将登录参数发布到我的服务器。第一次登录时,它会发送参数,但是在我注销并尝试再次登录后,它不会调用 getparams,而是发送之前的登录参数到服务器。

我尝试使用日志语句,第一次打印日志语句,但第二次就不会打印

StringRequest stringRequest=new StringRequest(Request.Method.POST,LOGIN_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (response!=null){
                        Log.d("loginResponse", response);
                        try {
                            JSONObject object= new JSONObject(response);
                            uid=object.getString(KEY_UR_ID);
                            firstName=object.getString(KEY_F_NAME);
                            lastName=object.getString(KEY_L_NAME);
                            fullName=firstName+" "+lastName;
                            email=object.getString(KEY_EMAIL);
                            phone=object.getString(KEY_PHONE);
                            dob=object.getString(KEY_DOB);
                            gender=object.getString(KEY_GENDER);
                            userType=object.getString(KEY_UTYPE);
                            address=object.getString(KEY_U_ADDRESS);
                            pincode=object.getString(KEY_U_PINCODE);

                            // Inserting row in users table
                            db.addUser(uid, firstName, lastName,email,phone,gender,userType,address,pincode);
                            // user successfully logged in
                            // Create login session
                            session.setLogin(true);
                            loginProgress.dismiss();
                            onBackPressed();

                        } catch (JSONException e) {
                            loginProgress.dismiss();
                            Toast.makeText(getApplicationContext(),"Invalid username/password",Toast.LENGTH_LONG).show();
                            e.printStackTrace();
                        }

                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            String message = null;
            if (error instanceof NetworkError) {
                message = "Cannot connect to Internet...Please check your connection!";
            } else if (error instanceof ServerError) {
                message = "The server could not be found. Please try again after some time!!";
            } else if (error instanceof AuthFailureError) {
                message = "Invalid username/password";
            } else if (error instanceof ParseError) {
                message = "Parsing error! Please try again after some time!!";
            } else if (error instanceof TimeoutError) {
                message = "Connection TimeOut! Please check your internet connection.";
            }
            Toast.makeText(getApplicationContext(),message,Toast.LENGTH_SHORT).show();

            loginProgress.dismiss();
        }
    })
    {
        @Override
        protected Map<String,String> getParams(){

            Map<String,String> params = new HashMap<String, String>();

            //This does not appear in the log for second time login
            Log.d("Params","Does it assign params?") ;
            params.put(KEY_EMAIL, inputEmail);
            params.put(KEY_PASSWORD, inputPassword);
            return params;
        }


        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> header = new HashMap<String, String>();
            header.put("Content-Type","application/x-www-form-urlencoded");
            return header;
        }
        @Override
        protected String getParamsEncoding() {
            return "utf-8";
        }
    };
    MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);

最佳答案

我也遇到这个问题了。 发生这种情况是因为 volley params 缓存。 尝试使用命令清理缓存: getCache().clear(); 即:

RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.getCache().clear();
requestQueue.add(stringRequest);

关于android - Volley 没有第二次调用 getParams(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41487423/

相关文章:

java - 如何创建具有 'Content-Type' 、授权 token 和正文的 Volley header ?

java - 如何在 Kotlin 中解析 Volley 中来自服务器的错误

android - 如何将联系人姓名和电话号码发送到MySQL数据库?

Android P visibilityawareimagebutton.setVisibility 只能从同一个库组中调用

android - 根据是否通过触摸输入按下按钮来应用事件

android - 如何缩小 Eclipse SDK 中的时间轴面板?

java - 高效加载媒体缩略图

java - 为什么我在 getString() 上得到一个空指针异常?

java - 使Java设置线程安全

Android Volley 请求响应不按顺序