EOFException при дооснащении при выполнении синхронных запросов PUT

В моем приложении я делаю синхронные запросы PUT с помощью библиотеки Retrofit. Проблема в том, что иногда библиотека бросает EOFException s.

Ниже приведена трассировка стека для одного из таких случаев

 29099-29269/com.mycompany.myapp D/Retrofit﹕ java.io.EOFException at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:192) at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189) at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:466) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) at $Proxy7.addEvents(Native Method) at com.mycompany.myapp.api.MyService.addEvents(MyService.java:59) 

Я пробовал следующие надежные решения, но ни один из них не помог в моем случае:

  • Дооснащение дает EOFException только в первый раз
  • Bug retrofit.RetrofitError: java.io.EOFException для Android
  • 1.4.0. Новая строка в String вызывает изменение. RetrofitError: java.io.EOFException

Вот как я создаю RestAdapter в своем приложении:

 OkHttpClient okHttpClient = new OkHttpClient(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Url) .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader("Accept", "application/json"); request.addHeader("Content-Type", "application/json"); } }) .setClient(new OkClient(okHttpClient)) .setLogLevel(RestAdapter.LogLevel.FULL) .setErrorHandler(new MyErrorHandler()) .build(); 

Кто-нибудь знает другое решение проблемы?

Кстати, я не могу использовать решения, связанные с System.setProperty("http.keepAlive", "false"); Потому что мне нужно поддерживать связь по причине производительности.

Возможно, EOF как потерянное сетевое соединение или тайм-аут. Попытайтесь увеличить тайм-аут и обеспечить сохранение работоспособности.

Вы можете посмотреть на этот ответ с аналогичной проблемой.

Если у вас большие запросы (я думаю, что это более 50 МБ данных), и вы не используете систему разбиения на страницы на стороне сервера, вы можете получить этот тип ошибок.

Например, это может быть TimeOut на стороне сервера.