转载处:http://blog.csdn.net/aygxylxk/article/details/27539107?utm_source=tuicool&utm_medium=referral
原本准备自己封装一下的,结果就看到了网上有个相同的博客就转载过来做一下记忆
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;
- }
- }
搞定。