简体   繁体   English

Volley库Android-从未使用过getHeaders()&从未使用过getParams()

[英]Volley library android - getHeaders() is never used & getParams() is never used

Here I want to learn why is getHeaders() and getParams() functions are not used and working.? 在这里,我想学习为什么getHeaders()getParams()函数没有使用并正常工作。

            private String tag_json_obj = "jobj_req";

            ProgressDialog pDialog = new ProgressDialog(this);

            String tag_json_obj = "json_obj_req";

            String url = "https://api.abc.xyz.com:3021/login";


            pDialog.setMessage("Loading...");
            pDialog.show();



            JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
                    url, obj,
                    new Response.Listener<JSONObject>() {

                        @Override
                        public void onResponse(JSONObject response) {
                            Log.d(AbcLogin.class.getSimpleName(), response.toString());
                            pDialog.hide();
                        }
                    }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(AbcLogin.class.getSimpleName(), "Error: " + error.getMessage());
                    // hide the progress dialog
                    pDialog.hide();
                }
            });

            /**
             * Passing some request headers
             * */

           @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json");
                return headers;
            }

            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("user", "abc12");
                params.put("password", "xyzan");

                return params;
            }

            // Adding request to request queue
            AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

I have to pass the headers and parameters both in the code. 我必须在代码中同时传递标头和参数。

StringRequest stringObjectRequest = new StringRequest(httpMethod, url, new Listener<String>() {
           @Override
           public void onResponse(String response) {

           }
       }, new ErrorListener() {

           @Override
           public void onErrorResponse(VolleyError error) {
               if(error != null && error.getMessage() != null)
               {
                   Log.e("Response error", error.getMessage());
               }
           }
       }
       )
       {
           @Override
           protected Map<String, String> getParams() throws AuthFailureError {
               return params;
           }
           @Override
           public Map<String, String> getHeaders() throws AuthFailureError {
               return super.getHeaders();
           }
       };

Please check in your code whether you using caching. 请检查您的代码是否使用缓存。

If caching is used it will allow getHeaders() method to be executed only when cache has expired otherwise getHeaders() will not be executed. 如果使用缓存,则仅当缓存过期时才允许执行getHeaders()方法,否则将不执行getHeaders()

Please use below code for caching in volley. 请使用以下代码进行凌空缓存。

 public static Cache.Entry parseIgnoreCacheHeaders(NetworkResponse response) {


        long now = System.currentTimeMillis();
        Map<String, String> headers = response.headers;
        long serverDate = 0;
        String serverEtag = null;
        String headerValue;
        headerValue = headers.get("Date");
        if (headerValue != null) {
            serverDate = HttpHeaderParser.parseDateAsEpoch(headerValue);
        }
        serverEtag = headers.get("ETag");

        final long cacheHitButRefreshed = 0; // in 0 millisecond cache will be hit, but also refreshed on background

        final long cacheExpired = 0; // in 0 millisecond this cache entry expires completely

        final long softExpire = now + cacheHitButRefreshed;
        final long ttl = now + cacheExpired;
        Cache.Entry entry = new Cache.Entry();
        entry.data = response.data;
        entry.etag = serverEtag;
        entry.softTtl = softExpire;
        entry.ttl = ttl;
        entry.serverDate = serverDate;
        entry.responseHeaders = headers;
        return entry;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM