package com.android.volley.request; import com.android.volley.NetworkResponse; import com.android.volley.Response; import com.android.volley.error.ParseError; import com.android.volley.toolbox.HttpHeaderParser; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.zip.GZIPInputStream; /** * A canned request for retrieving the parse the gzip response body at a given URL as a String using a GZIPInputStream. */ public class GZipRequest extends StringRequest { /** * Creates a new request with the given method. * * @param method the request {@link Method} to use * @param url URL to fetch the string at * @param listener Listener to receive the String response * @param errorListener Error listener, or null to ignore errors */ public GZipRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { super(method, url, listener, errorListener); } /** * Creates a new GET request. * * @param url URL to fetch the string at * @param listener Listener to receive the String response * @param errorListener Error listener, or null to ignore errors */ public GZipRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { super(url, listener, errorListener); } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { String output = ""; try { GZIPInputStream gStream = new GZIPInputStream(new ByteArrayInputStream(response.data)); InputStreamReader reader = new InputStreamReader(gStream); BufferedReader in = new BufferedReader(reader); String read; while ((read = in.readLine()) != null) { output += read; } reader.close(); in.close(); gStream.close(); } catch (IOException e) { return Response.error(new ParseError()); } return Response.success(output, HttpHeaderParser.parseCacheHeaders(response)); } }