2016-12-01 3 views
0

Я использую библиотеку Okhttp3, и я новичок в ней. Я прочитал некоторые из уроков и его работоспособность до тех пор, пока этот случай использования не появится:Неожиданная ошибка конца потока при втором попадании в API

У меня есть внешний класс Asynctask, где я выполняю коды POST и GET. Поэтому, когда я впервые вызываю Asynctask, он работает нормально. Во второй раз, когда я вызываю ту же 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 [email protected] 
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) 
+0

показать полный журнал поможет разрешить –

+0

@RajeshRajendiran Я отправил свой журнал – raphPradhan

+1

Вам не нужно AsyncTask, если вы используете OkHttp ASync запросы. Используйте 'client.newCall (запрос) .enqueue' ... См. Https://github.com/square/okhttp/wiki/Recipes#asynchronous-get –

ответ

0

Попробуйте

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


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

Источник here

+0

Получение той же проблемы. У меня есть пост Async Task, который вызывается каждый раз, когда выполняется пост-задача. Поэтому я передаю ваш код выше этой Asynctask каждый раз. Я делаю что-то неправильно. Он работает в первый раз, но второй раз он начинает создавать проблему. – raphPradhan

+0

@raphPradhan Проблема была в 2-х областях: 1. Ваш клиент должен быть в AsyncTask 2.Response поток должен быть закрыт –

+0

Извините, если я звук наивный. Но где мне инициализировать клиента в Asynctask? onPreExecute() или в конструкторе? – raphPradhan

Смежные вопросы