当前位置: 代码迷 >> Android >> Android volley平添Cookie
  详细解决方案

Android volley平添Cookie

热度:43   发布时间:2016-04-28 05:24:10.0
Android volley添加Cookie

Volley 默认是不支持Cookie的,如何添加Cookie,很是头疼。

看源码后发现HttpStack的子类中都有添加Header的代码。

HurlStack  performRequest方法中

HashMap<String, String> map = new HashMap<String, String>();        map.putAll(request.getHeaders());        map.putAll(additionalHeaders);        if (mUrlRewriter != null) {            String rewritten = mUrlRewriter.rewriteUrl(url);            if (rewritten == null) {                throw new IOException("URL blocked by rewriter: " + url);            }            url = rewritten;        }        URL parsedUrl = new URL(url);        HttpURLConnection connection = openConnection(parsedUrl, request);        for (String headerName : map.keySet()) {            connection.addRequestProperty(headerName, map.get(headerName));        }

HttpClientStack  performRequest方法中

addHeaders(httpRequest, request.getHeaders());

看到什么端倪了吧,对 request.getHeaders()可以设置Cookie

所以我们只要继承Request,实现request中的getHeaders()方法就行了。

下面是我继承JsonObjectRequest实现的方法

import java.util.HashMap;import java.util.Map;import org.json.JSONObject;import com.android.volley.AuthFailureError;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.JsonObjectRequest;public class CookieRequest extends JsonObjectRequest {    private Map<String, String> mHeaders=new HashMap<String, String>(1);    public CookieRequest(String url, JSONObject jsonRequest, Listener<JSONObject> listener,                                   ErrorListener errorListener) {        super(url, jsonRequest, listener, errorListener);    }    public CookieRequest(int method, String url, JSONObject jsonRequest, Listener<JSONObject> listener,                                   ErrorListener errorListener) {        super(method, url, jsonRequest, listener, errorListener);    }        public void setCookie(String cookie){        mHeaders.put("Cookie", cookie);    }    @Override    public Map<String, String> getHeaders() throws AuthFailureError {        return mHeaders;    }}

搞定。





  相关解决方案