package eoc.studio.voicecard.volley.toolbox; import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; import java.io.UnsupportedEncodingException; import java.lang.reflect.Type; import java.net.URLDecoder; import java.util.List; import org.apache.http.protocol.HTTP; public class GsonListRequest<T> extends Request<T> { private final Gson mGson = new Gson(); private Class<T> classOfT; private Type mType; private final Response.Listener<T> mListener; public GsonListRequest(int method, String url, Class<T> clazz, Response.Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); this.classOfT = clazz; this.mListener = listener; } public GsonListRequest(int method, String url, Type type, Response.Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); this.mType = type; this.mListener = listener; } @SuppressWarnings("unchecked") @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { //Log.e("GsonListRequest", "response.headers.get(\"content-type\")" +response.headers.get("content-type")); // String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); response.headers.put(HTTP.CONTENT_TYPE, "text/plain; charset=utf-8"); String json= new String(response.data, "utf-8"); json = URLDecoder.decode(URLDecoder.decode(json)); // // Log.d("GsonListRequest", "decode json:" + json); // Log.d("GsonListRequest", "json:" +json); return classOfT != null ? Response.success(mGson.fromJson(json, classOfT), HttpHeaderParser.parseCacheHeaders(response)) : (Response<T>) Response.success(mGson.fromJson(json, mType), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { Log.e("GsonListRequest", "UnsupportedEncodingException" + e.toString()); return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(T response) { // TODO Auto-generated method stub if (mListener!=null) mListener.onResponse(response); } }