2011-08-21 31 views
6

tham khảo: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/httpagent.html#d4e1261tự động xử lý phản ứng gzip http trong Android

Trang này cho biết đoạn mã sau sẽ thiết lập HttpClient để tự động xử lý phản hồi gzip (trong suốt đối với người dùng của HttpClient):

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

Tuy nhiên, tôi không thể tìm thấy các lớp học RequestAcceptEncodingResponseContentEncoding trong SDK Android. Có phải họ chỉ còn thiếu - tôi có cần tự viết những thứ này không?

Trả lời

11

Đây là mã mà tôi sử dụng:

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

Bạn cũng có thể muốn xem xét SyncService.java từ/O ứng dụng Google I.

+0

Chính xác những gì tôi cần - nhờ còn cho tài liệu tham khảo để SyncService –

+0

Liên kết không hoạt động. Xin vui lòng sửa chữa nó. –

+3

Hãy nhớ rằng nếu bạn đang sử dụng phiên bản cũ hơn của Apache HTTP Client, bạn có thể không tìm thấy 'GzipDecompressingEntitiy'. Bạn có thể lấy mã đó tại đây: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/compress/GzipDecompressingEntity.java –

0

Android được đóng gói với phiên bản cũ của thư viện Apache HTTP Client mà không có các lớp bạn thiếu.

Bạn có thể bó một phiên bản mới hơn của thư viện khách hàng Apache HTTP với ứng dụng của bạn (xem this câu trả lời) hoặc sử dụng AndroidHttpClient thay vì được giới thiệu vào mức API 8.

+0

_ Lớp học này không được chấp nhận ở cấp API 22._ – Prince

Các vấn đề liên quan