2012-06-01 35 views
1

我有與json webservice連接的大問題​​。我想從服務器獲取gzipped數據。 以下是我的代碼。問題是當我解析響應我正在接受gzip編碼和我得到gzipped數據,我讀這條數據線一切看起來不錯,然後application throw EOFException,出了什麼問題? 我認爲如果我可以讀取gzipped數據的某些部分,服務器響應是很好的。我會感謝任何幫助:)。Java和JSON響應EOFException

HttpPost httppost = new HttpPost(requestUrl); 
    httppost.addHeader("Accept-Encoding", "gzip"); 
    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity entity = response.getEntity(); 
    inputStream = entity.getContent(); 
    contentEncoding = response.getFirstHeader("Content-Encoding"); 
} 

private String convertResponseToString() throws IOException { 
    GZIPInputStream zis = null; 

    if (contentEncoding != null 
      && contentEncoding.getValue().equalsIgnoreCase("gzip")) { 
     GZIPInputStream gzipStream = new GZIPInputStream(inputStream); 

     if (true) { 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      byte[] buf = new byte[256]; 
      int len; 
      while ((len = gzipStream.read(buf, 0, 256)) > 0) { 
       bos.write(buf, 0, len); 
      } 
      bos.flush(); 
      buf = bos.toByteArray(); 
      inputStream.close(); 
      inputStream = new ByteArrayInputStream(buf); 
     } 

    } 

異常堆棧跟蹤:

06-01 10:56:25.447: W/System.err(285): java.io.EOFException 
06-01 10:56:25.476: W/System.err(285): at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:219) 
06-01 10:56:25.476: W/System.err(285): at java.util.zip.GZIPInputStream.verifyCrc(GZIPInputStream.java:202) 
06-01 10:56:25.476: W/System.err(285): at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:186) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.requests.RequestSender.convertResponseToString(RequestSender.java:79) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.requests.RequestSender.parseToJSON(RequestSender.java:108) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.requests.GetConferencesListRequestSender.getResults(GetConferencesListRequestSender.java:36) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.requests.GetConferencesListRequestSender.getResults(GetConferencesListRequestSender.java:1) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.requests.RequestExecutor.go(RequestExecutor.java:33) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.EventListView.containerConferences(EventListView.java:138) 
06-01 10:56:25.476: W/System.err(285): at org.pw.inf.EventListView.onClick(EventListView.java:101) 
06-01 10:56:25.476: W/System.err(285): at android.view.View.performClick(View.java:2364) 
06-01 10:56:25.476: W/System.err(285): at android.view.View.onTouchEvent(View.java:4179) 
06-01 10:56:25.476: W/System.err(285): at android.view.View.dispatchTouchEvent(View.java:3709) 
06-01 10:56:25.476: W/System.err(285): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
06-01 10:56:25.476: W/System.err(285): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
06-01 10:56:25.486: W/System.err(285): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
06-01 10:56:25.486: W/System.err(285): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
06-01 10:56:25.486: W/System.err(285): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
06-01 10:56:25.486: W/System.err(285): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
06-01 10:56:25.486: W/System.err(285): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
06-01 10:56:25.486: W/System.err(285): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
06-01 10:56:25.486: W/System.err(285): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
06-01 10:56:25.486: W/System.err(285): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
06-01 10:56:25.486: W/System.err(285): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
06-01 10:56:25.486: W/System.err(285): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-01 10:56:25.486: W/System.err(285): at android.os.Looper.loop(Looper.java:123) 
06-01 10:56:25.486: W/System.err(285): at android.app.ActivityThread.main(ActivityThread.java:4363) 
06-01 10:56:25.486: W/System.err(285): at java.lang.reflect.Method.invokeNative(Native Method) 
06-01 10:56:25.486: W/System.err(285): at java.lang.reflect.Method.invoke(Method.java:521) 
06-01 10:56:25.486: W/System.err(285): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
06-01 10:56:25.486: W/System.err(285): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
06-01 10:56:25.486: W/System.err(285): at dalvik.system.NativeStart.main(Native Method) 
+0

我猜測HttpClient的照顧了數據提取的你了。 – nhahtdh

+0

我不確定我是否想這樣做,也許我做錯了,但我不這麼認爲。 – Mathew1990

+0

你能發佈完整的異常堆棧跟蹤嗎? – yorkw

回答