Volley框架 Cookies的使用

今天试着用了一下Volley,听说很强大的样子,然而用起来好像不是那么顺手,

就拿Cookies来说吧,竟然找不到这么管理cookies …

首先看 com.android.volley.Request.java

package com.android.volley;

import ...

...

public abstract class Request<T> implements Comparable<Request<T>> {

...
// header 是的空。。。
    public Map<String, String> getHeaders() throws AuthFailureError {
        return Collections.emptyMap();
    }

...

//  params也是空的。。。
protected Map<String, String> getParams() throws AuthFailureError {
        return null;
    }

想用只能自己重写
com.pansing.test.MyRequest.java

package com.pansing.test;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.util.Collections;
import java.util.Map;

/**
 * Created by Pansing on 2015/7/18.
 */
public class MyRequest extends StringRequest {

    protected Map<String,String> mHeaders;
    protected Map<String, String> mParams;
    protected String strCookies;

    public MyRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(method, url, listener, errorListener);
    }

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return mParams;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        if(mHeaders == null){
            mHeaders = Collections.emptyMap();
        }
        return mHeaders;
    }

    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        strCookies = response.headers.get("Set-Cookie");
        return super.parseNetworkResponse(response);
    }

    public void setHeaders(Map<String,String> headers){
        this.mHeaders = headers;
    }
    public void setParams(Map<String, String> params){
        this.mParams = params;
    }

    public String getCookies (){
        return strCookies;
    }
}

这样就可以实现用setHeaders的方式设置cookies

HashMap<String,String> headers = new HashMap<>();
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1");
headers.put("Referer", "http://weibo.com/");
headers.put("Content-Type", "application/x-www-form-urlencoded");
// 加cookies
headers.put("Cookie",strCookies);

request.setHeaders(headers);

想要获取cookies,可以通过

myrequest.getcookies();

然而,这个这并不是我想要的,我想要在onResponse的时候同时可以取到cookies,那咋办?

最后想了想,只能重写parseNetworkResponse了:


MyRequest request = new MyRequest(Request.Method.POST, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String str) {
        Log.d(TAG,str);
    }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Log.e(TAG,"error");
        }
    }){
        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            strCookies = response.headers.get("Set-Cookie");
            String strCookies = strCookies;   // 该死的取Cookies
            return super.parseNetworkResponse(response);
        }
    };

    mQueue.add(request);

本来想用框架简便点,这么看来,改动有点多了,而且其它方面视乎也没有想象中那么简便,ImageLoader用了一下感觉还好,但貌似其它框架也可以更方便的实现呢,折腾了半天感觉自己不适合用,可能是太菜鸟的缘故,理解不了。 ( ̄_ ̄|||)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值