2017-03-03 66 views
0

字符串这是我的代码:解压gzip JSON响应的Android

try { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 
    httpPost.setEntity(new StringEntity(strJson, "UTF-8")); 
    httpPost.setHeader("api_key", "<TSssssssssssssaaa7>"); 
    httpPost.setHeader("Content-Type", "application/json"); 
    httpPost.setHeader("Accept-Encoding", "gzip"); 
    response = httpClient.execute(httpPost); 
    resp=EntityUtils.toString(response.getEntity(), "UTF-8"); 

    Log.w("QueingSystem", strJson); 
    Log.w("QueingSystem", EntityUtils.toString(response.getEntity(), "UTF-8")); 
    Log.w("QueingSystem", EntityUtils.toString(response.getEntity())); 
} catch (Exception e) { 
    Log.d("InputStream", e.getLocalizedMessage()); 
} 

而且我在日志中输出如下:

��������������V*J-.��+NU��VJ�O�&�:J���ʼn�@��ciIFj^IfrbIf~��[bfNj�Rm-���n��;������ 

任何一个可以帮我得到确切的以字符串格式输出json响应?

回答

0

您必须手动检查响应是否为gzip压缩。如果它是你可以用响应实体为GzipDecompressingEntity处理减压:

// setup request 
HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(url); 
httpPost.setEntity(new StringEntity(strJson, "UTF-8")); 
httpPost.setHeader("api_key", "<TSssssssssssssaaa7>"); 
httpPost.setHeader("Content-Type", "application/json"); 
httpPost.setHeader("Accept-Encoding", "gzip"); 
// execute request 
response = httpClient.execute(httpPost); 
HttpEntity entity = response.getEntity(); 

// handle gzip compression 
Header contentEncodingHeader = entity.getContentEncoding(); 
if (contentEncodingHeader != null) { 
    HeaderElement[] encodings = contentEncodingHeader.getElements(); 
    for (HeaderElement encoding : encodings) { 
     if (encoding.getName().equalsIgnoreCase("gzip")) { 
      entity = new GzipDecompressingEntity(entity); 
      break; 
     } 
    } 
} 

// get response content 
resp = EntityUtils.toString(entity, "UTF-8"); 
+0

实体=新GzipDecompressingEntity(实体);我得到一个错误无法解决 –