2011-08-21 14 views
6

Referencia: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/httpagent.html#d4e1261manejo automático de las respuestas gzip http en Android

Esta página dice el siguiente código de configuración HttpClient para manejar automáticamente las respuestas gzip (transparente para el usuario de HttpClient):

DefaultHttpClient httpclient = new DefaultHttpClient(); 
httpclient.addRequestInterceptor(new RequestAcceptEncoding()); 
httpclient.addResponseInterceptor(new ResponseContentEncoding()); 

Sin embargo, no puede encontrar las clases RequestAcceptEncoding y ResponseContentEncoding en el SDK de Android. ¿Faltan simplemente? ¿Necesito escribir esto yo mismo?

Respuesta

11

Este es el código que utilizo:

mHttpClient.addResponseInterceptor(new HttpResponseInterceptor() { 
     public void process(final HttpResponse response, 
       final HttpContext context) throws HttpException, 
       IOException { 
      HttpEntity entity = response.getEntity(); 
      Header encheader = entity.getContentEncoding(); 
      if (encheader != null) { 
       HeaderElement[] codecs = encheader.getElements(); 
       for (int i = 0; i < codecs.length; i++) { 
        if (codecs[i].getName().equalsIgnoreCase("gzip")) { 
         response.setEntity(new GzipDecompressingEntity(
           entity)); 
         return; 
        } 
       } 
      } 
     } 
    }); 

También puede que desee ver en SyncService.java desde la aplicación Google I/O.

+0

Exactamente lo que necesitaba - gracias también por la referencia a SyncService –

+0

El enlace no funciona. Por favor, rectifícalo. –

+3

Recuerde que si utiliza una versión anterior del Apache HTTP Client, es posible que no encuentre 'GzipDecompressingEntitiy'. Puede obtener el código aquí: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/compress/GzipDecompressingEntity.java –

0

Android se incluye con una versión bastante antigua de la biblioteca Apache HTTP Client que no tiene las clases que le faltan.

Puede sujetar una nueva versión de la biblioteca de cliente HTTP Apache con su solicitud (ver this respuesta) o utilizar AndroidHttpClient vez que se introdujo en el nivel API 8.

+0

_Esta clase estaba en desuso en el nivel de API 22._ – Prince

Cuestiones relacionadas