package com.android.volley.toolbox;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
/**
* 当前类注释:进行扩展GSON数据解析json数据
* 项目名:FastDev4Android
* 包名:com.android.volley.toolbox
* 作者:江清清 on 15/11/12 18:28
* 邮箱:jiangqqlmj@163.com
* QQ: 781931404
* 公司:江苏中天科技软件技术有限公司
*/
public class GsonRequest<T> extends Request<T> {
private final Response.Listener<T> listener;
private Gson gson;
private Class<T> mClass;
/**
* GsonRequest 构造函数
* @param method 请求方法
* @param url 请求地址
* @param listener 数据请求成功回调接口
* @param errorListener 数据请求失败回调接口
* @param pClass 需要进行解析的类
*/
public GsonRequest(int method,String url,Response.Listener<T> listener,Response.ErrorListener errorListener,Class<T> pClass){
super(method,url,errorListener);
this.listener=listener;
gson=new Gson();
mClass=pClass;
}
/**
* GsonRequest 构造函数 默认使用GET请求方法
* @param url
* @param listener
* @param errorListener
* @param pClass
*/
public GsonRequest(String url,Response.Listener<T> listener,Response.ErrorListener errorListener,Class<T> pClass){
super(Method.GET,url,errorListener);
this.listener=listener;
gson=new Gson();
mClass=pClass;
}
/**
* 数据解析
* @param response Response from the network 网络请求返回数据
* @return
*/
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String jsonStr=new String(response.data,HttpHeaderParser.parseCharset(response.headers));
T data=gson.fromJson(jsonStr,mClass);
return Response.success(data,HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
/**
* 数据分发
* @param response The parsed response returned by
*/
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
}