Java и JSON-ответ EOFException

1

У меня большая проблема с json webservice. Я хочу получить gzipped данные с сервера. Ниже мой код. Проблема в том, что когда я разбираю ответ, я принимаю gzip кодировку, и я получаю gzipped данные, я читаю эти строки данных по application throw EOFException, все выглядит хорошо, а затем application throw EOFException, что не так??? Я думаю, что ответ сервера хорош, если я могу прочитать часть данных gzipped. Я буду благодарен за любую помощь :).

    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 уже позаботился о извлечении данных для вас.
  • 0
    Я не уверен, что пытался сделать это, может быть, я сделал это неправильно, но я так не думаю.
Показать ещё 4 комментария
Теги:
web-services
request
response

1 ответ

0

https://code.google.com/p/android/issues/detail?id=24672

Connection.setRequestProperty( "Accept-Encoding", "" ); add this line of code before use the connection

Ещё вопросы

Сообщество Overcoder
Наверх
Меню