使用volley很久了,关于volley处理网络请求,其确实封装简化了过程,然而有些功能还是本身不支持,需要自己扩展配置。比如本地保存服务端返回的cookie数据。
volley中的Request类,代表一个网络请求的抽象类,我们常常用到的JsonObjectRequest和StringObjectRequest都是继承的它,我们通过构建一个Request类的非抽象子类(StringRequest、JsonRequest、ImageRequest 或自定义)对象,并将其加入到·RequestQueue·中来完成一次网络请求操作。
Volley 支持 8 种 Http 请求方式 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, PATCH
Request 类中包含了请求 url,请求请求方式,请求 Header,请求 Body,请求的优先级等信息。因为是抽象类,子类必须重写的两个方法:
abstract protected Response parseNetworkResponse(NetworkResponse response);
此方法意思是将网络返回的字节数据转换成想要的类型(如String,Onject或者其他)abstract protected void deliverResponse(T response);
此方法将已经解析成想要的类型的内容传递给它们的监听回调。
要想保存session,可见我们在请求的时候需要保存到sharedpreference中.一般情况下我们在application中新new 一个 RequestQueue 就可以处理所有网络请求,这样RequestQueue的生命周期维护就交给application了,保存cookie的工具方法可以在application中完成。
代码如下:
public class CustomApplication extends Application {
private static final String SET_COOKIE_KEY = "Set-Cookie";
private static final String COOKIE_KEY = "Cookie";
private static final String SESSION_COOKIE = "JSESSIONID";
private static CustomApplication instance;
private RequestQueue requestQueue;
private SharedPreferences preferences;
public static CustomApplication newInstance() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
preferences = PreferenceManager.getDefaultSharedPreferences(this);
requestQueue = Volley.newRequestQueue(this);
}
public RequestQueue getRequestQueue() {
return requestQueue;
}
/**
* 检查返回的Response header中有没有session
*