在Android中自动处理gzip http响应

时间:2011-08-21 15:43:09

标签: android http gzip

参考:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/httpagent.html#d4e1261

此页面显示以下代码将设置HttpClient以自动处理gzip响应(对HttpClient的用户透明):

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

但是,我在Android SDK中找不到RequestAcceptEncodingResponseContentEncoding类。他们只是缺少 - 我是否需要自己写这些?

2 个答案:

答案 0 :(得分:11)

以下是我使用的代码:

   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;
                   }
               }
           }
       }
   });

您可能还想从Google I / O应用中查看SyncService.java

答案 1 :(得分:0)

Android捆绑了一个相当旧版本的Apache HTTP客户端库,它没有您缺少的类。

您可以将较新版本的Apache HTTP Client库与您的应用程序捆绑在一起(请参阅this answer)或使用AndroidHttpClient代替API级别8中引入的内容。