В моем приложении я делаю синхроннымPUT
запросов с использованием библиотеки Дополнения. Проблема в том, что иногда библиотека бросает EOFException
с.EOFException в Модернизации при выполнении синхронных запросов PUT
Ниже приведен трассировку стека для одного из таких случаев
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)
Я попытался следующие prosposed решения, но ни один из них не помог в моем случае:
- Retrofit gives EOFException only the first time
- bug retrofit.RetrofitError: java.io.EOFException for Android
- 1.4.0 New line in String causes retrofit.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();
знает любые один в другое решение для этой проблемы?
Btw, я не могу использовать решения, связанные с System.setProperty("http.keepAlive", "false");
, потому что мне нужно поддерживать мое соединение живым из-за соображений производительности.
Является ли сервер, возвращающий вам 204? – VM4
Вам удалось решить проблему? Подобный обсуждается в [номер статьи 1114 OkHttp] (https://github.com/square/okhttp/issues/1114). – JJD
@JJD Нет. Я не решил проблему. – Bobrovsky