Volley关于添加Cookie总结

最近工作替换Volley框架,首先说Volley十分强大,对网络队列请,图片下载缓存机制都有很大优化。是目前十分常用重要的网络请求框架。但Volley虽然不支持添加Cookie这方面,但也可以通过addHeader方法添加。


首先不论是StringRequest,JosonRequest,ImageRequest都是继承Volley的核心类

然后重写getHeaders()方法即可。

private Map sendHeader = new HashMap(1);
@Override
    public Map getHeaders() throws AuthFailureError {
//这里就是为请求头添加参数,根据后台要求自行添加
        String cookies = "";
        cookies = "visit-source=" + VERSION_SOURCE + ";" + "channel=" + Utils.getChannelValue
                (MainApplication.getApplication()) + ";" + "current-version=" + versionName + ";"
                + PreferenceFile.getResponseCookies(MainApplication.getApplication()
                .getApplicationContext());
        if (!TextUtils.isEmpty(token)) {
 + token);
            cookies = cookies + ";" + "adw_id=" + token;
        }
        sendHeader.put("cookie",cookies);
        return sendHeader;
    }

另外,有时候需要服务器传过来的Cookie,在请求的时候再传回去怎么办呢,首先是得到后台传过来的Cookie

Request中有一个非常重要的方法parseNetworkResponse,在改方法中得到

@Override
    protected Response parseNetworkResponse(NetworkResponse response) {
            String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            
            LogUtils.logD("Volley POST Response: ", "get data in parseNetworkResponse " + new String(response.data));
            
            String responseCookiesStr = response.headers.get("Set-Cookie");
            //根据自己的业务需求得到想要的数据参数,并作存数方便在request请求时候在添加在请求头中
            if (responseCookiesStr!= null && responseCookiesStr.contains("BUID")) {
                PreferenceFile.saveResponseCookies(MainApplication.getApplication().getApplicationContext(), responseCookiesStr);
            }

            // 该jsonObject会被deliverResponse递交,调用请求时则能在onResponse中得到
            JSONObject jsonObject = new JSONObject(jsonString);
            LogUtils.logD("Volley JsonObjectPOST: ", "jsonObject " + jsonObject.toString());

            return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
       
    }

另外最近处理这块时候还遇到一个问题,不用Volley框架的时候没次与后台交互,后太Nginx会自动添加一个Cookie,但替换Volley后不知道,是不是因为Volley有个开关给关掉了,还是怎么,看了底层代码也木有找到。所以就通过添加头文件的时候给添加上后台需要的Cookie,也就是上面两端代码来解决的。

你可能感兴趣的:(Android开源框架)