Неожиданная ошибка конца потока при втором обращении к API

Я пробую библиотеку Okhttp3, и я новичок в этом. Я прочитал некоторые учебники, и они работают нормально, пока не появится этот вариант использования:

У меня есть внешний класс Asynctask, в котором я выполняю свои коды POST и GET. Поэтому, когда я вызываю асинтаск в первый раз, он работает нормально. Во второй раз, когда я вызываю ту же самую Asynctask, она дает мне ошибку java.io.IOException: неожиданный конец потока на okhttp3.Address.....

Может кто-нибудь объяснить, почему это происходит? Я создаю объект OkHttpClient в действии и передаю его в Asynctask.

Это конструктор:

public Post(JsonObject jsonParams){
this.jsonParams = jsonParams;
}

Это фоновая задача:

Response response = null;
    try {
        OkHttpClient client = new OkHttpClient.Builder()
                .retryOnConnectionFailure(true)
                .build();

        RequestBody body = RequestBody.create(JSON, jsonParams);
        Request.Builder requestBuilder = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader(APP_AUTHORIZATION_KEY, AUTHORIZATION_KEY);

        Request request = requestBuilder.build();

        response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            responseBody = response.body().string();
            Log.v("POST RESPONSE", "response" + responseBody);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (response != null)
            response.close();
    }

Выкладываю свой лог:

java.io.IOException: unexpected end of stream on okhttp3.Address@d8a95c17
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:199)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:775)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.HttpEngine.access$200(HttpEngine.java:86)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:760)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:613)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.RealCall.getResponse(RealCall.java:244)
12-02 10:30:11.544 20214-22391/com.test.network W/System.err:     at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201)
12-02 10:30:11.564 20214-22391/com.test.network W/System.err:     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163)
12-02 10:30:11.574 20214-22391/com.test.network W/System.err:     at okhttp3.RealCall.execute(RealCall.java:57)
12-02 10:30:11.574 20214-22391/com.test.network W/System.err:     at com.test.network.tasks.Post.doInBackground(Post.java:60)
12-02 10:30:11.574 20214-22391/com.test.network W/System.err:     at com.test.network.tasks.Post.doInBackground(Post.java:21)
12-02 10:30:11.584 20214-22391/com.test.network W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-02 10:30:11.584 20214-22391/com.test.network W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-02 10:30:11.584 20214-22391/com.test.network W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-02 10:30:11.584 20214-22391/com.test.network W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-02 10:30:11.584 20214-22391/com.test.network W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-02 10:30:11.604 20214-22391/com.test.network W/System.err:     at java.lang.Thread.run(Thread.java:841)
12-02 10:30:11.604 20214-22391/com.test.network W/System.err: Caused by: java.io.EOFException: \n not found: size=0 content=…
12-02 10:30:11.614 20214-22391/com.test.network W/System.err:     at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:215)
12-02 10:30:11.614 20214-22391/com.test.network W/System.err:     at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184)

person raphPradhan    schedule 01.12.2016    source источник
comment
показать полный журнал помочь решить   -  person Rajesh    schedule 01.12.2016
comment
@RajeshRajendiran Я разместил свой журнал   -  person raphPradhan    schedule 02.12.2016
comment
Вам не нужен AsyncTask, если вы используете асинхронные запросы OkHttp. Используйте client.newCall(request).enqueue... См. https://github.com/square/okhttp/wiki/Recipes#asynchronous-get   -  person OneCricketeer    schedule 02.12.2016
comment
Также обратите внимание: если вы все равно используете OkHttp для JSON, загляните в раздел «Дооснащение».   -  person OneCricketeer    schedule 02.12.2016
comment
@raphPradhan попробуйте мой ответ   -  person Rajesh    schedule 02.12.2016


Ответы (1)


Попробуй это

OkHttpClient client = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .build();


   try {
         if (response.isSuccessful()) 
              responseBody = response.body().string();
       } finally {
         response.close();
       }

Источник здесь

person Rajesh    schedule 02.12.2016
comment
Получение той же проблемы. У меня есть пост-асинхронная задача, которая вызывается каждый раз, когда выполняется пост-задача. Поэтому я каждый раз передаю ваш приведенный выше код в эту асинтаску. Значит я что-то не так делаю. Это работает в первый раз, но во второй раз это начинает создавать проблему. - person raphPradhan; 02.12.2016
comment
@raphPradhan Проблема заключалась в двух областях: 1. Ваш клиент должен быть в AsyncTask 2. Поток ответа должен быть закрыт. - person Rajesh; 02.12.2016
comment
Извините, если я покажусь наивным. Но где мне инициализировать клиента в Asynctask? onPreExecute() или в конструкторе? - person raphPradhan; 02.12.2016
comment
@raphPradhan делает в doInBackground - person Rajesh; 02.12.2016
comment
Я сделал, как вы просили. До сих пор нет прогресса :( Изменили код в вопросе. Пожалуйста, посмотрите. - person raphPradhan; 02.12.2016
comment
@raphPradhan попробуйте добавить заголовок .header (соединение, закрыть) - person Rajesh; 02.12.2016
comment
пробовал .addHeader(Connection,close) и .header(Connection,close), похоже, не решает проблему. :( - person raphPradhan; 02.12.2016