public class CustomRequest extends Request { private Map params; private Response.Listener responseListener; private Response.ErrorListener errorListener; private Class classType; public CustomRequest(String url, Map params, Response.Listener responseListener, Response.ErrorListener errorListener, Class classType) { this(Method.GET, url, params, responseListener, errorListener, classType); } public CustomRequest(int method, String url, Map params, Response.Listener responseListener, Response.ErrorListener errorListener, Class classType) { super(method, url, errorListener); this.params = params; this.responseListener = responseListener; this.errorListener = errorListener; this.classType = classType; } @Override protected Map getParams() throws AuthFailureError { return params; } @Override protected Response parseNetworkResponse(NetworkResponse networkResponse) { try { String response = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers)); if (classType.equals(JSONObject.class)) { return Response.success((T)new JSONObject(response), HttpHeaderParser.parseCacheHeaders(networkResponse)); } if (classType.equals(JSONArray.class)) { return Response.success((T)new JSONArray(response), HttpHeaderParser.parseCacheHeaders(networkResponse)); } return null; } catch (UnsupportedEncodingException unsupportedEncodingException) { return Response.error(new ParseError(unsupportedEncodingException)); } catch (JSONException jsonException) { return Response.error(new ParseError(jsonException)); } } @Override protected void deliverResponse(T jsonObject) { responseListener.onResponse(jsonObject); } @Override public void deliverError(VolleyError volleyError) { errorListener.onErrorResponse(volleyError); } }