参考了很多网上的文章,自己写一个.
貌似有点错误, 要认真理解.
public class JsonBeanRequest<T> extends Request<T>{
private final Gson gson = new Gson();
private final Class<T> clazz;
private final Listener<T> listener;
private Map<String, String> params;
private static Map<String, String> mHeader = new HashMap<String, String>();
/**
* @param url
* @param clazz 最终的转化类型
* @param headers 请求附带的头信息
* @param listener
* @param params 附加数据
* @param errorListener
*/
public JsonBeanRequest(String url, Map<String, String> params, Class<T> clazz, Listener<T> listener,
ErrorListener errorListener)
{
//初始的一些设置,也可以在别的地方设置
super(Method.POST, url, errorListener);
this.clazz = clazz;
this.listener = listener;
mHeader.put("User-Agent", Cookies.User_Agent);
mHeader.put("token", Cookies.token);
mHeader.put("memberid", "123");
if(null != Cookies.JSESSIONID){
mHeader.put("Cookie", Cookies.JSESSIONID);
}
this.params = params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError{
//volley 内部调用这个方法
return mHeader;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
<span style="font-family: Arial, Helvetica, sans-serif;">//volley 内部调用这个方法</span>
return params;
}
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response){
try
{
//读取httpResponseHeader信息
Map<String, String> responseHeaders = response.headers;
String sth = responseHeaders.get("your_key");
/*
* do sth ...
*/
/*
* 返回的数据
*/
String jsonStr = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
/*
* 转化成对象 , 由suc listener 的 public void onResponse(Token response) 接收
*/
return Response.success(gson.fromJson(jsonStr, clazz), HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e){
return Response.error(new ParseError(e));
}
}
}