今天试着用了一下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用了一下感觉还好,但貌似其它框架也可以更方便的实现呢,折腾了半天感觉自己不适合用,可能是太菜鸟的缘故,理解不了。 ( ̄_ ̄|||)