Retrofit дает EOFException только в первый раз

Я использую framework Retrofit в первый раз в моем проекте Android. Он обрабатывает связь с бэкэндом. Теперь самое странное, что на Android 4.4 все работает как шарм. На каждой версии ниже. Я получаю java типа RetrofitError.Ио.EOFException. Поэтому он терпит неудачу в первый раз, а затем, когда я нажимаю кнопку повтора, он работает. Так почему же это не в первый раз?

Я хочу исправить это, потому что это раздражает, что пользователи должны нажать повторить попытку...

У кого-нибудь есть решение для этого?

3 ответов


Я нашел решение. В Android 4.4 они работают с OkHttpclient, поэтому он работает на 4.4, а не на старых версиях Android.

чтобы решить эту проблему, добавьте зависимость в gradle:

compile 'com.squareup.okhttp:okhttp-tests:1.5.1'

и создать новый клиент, как это:

OkHttpClient client = new OkHttpClient();

добавьте этот новый клиент в restadapter, чтобы использовать это:

setClient(new OkClient(client))

ошибка должна быть решена сейчас.


эта ошибка, похоже, происходит из-за предыдущего повторного использования соединения. Вы можете отключить keepalive, чтобы избежать этого:

System.setProperty("http.keepAlive", "false");

Я, наконец, решить эту проблему.решением было использовать как OkClient, так и OkHttp. После добавления этих двух библиотек я установил клиента на Retrofit в OkHttp, как это

RestAdapter restAdapter = new RestAdapter.Builder()
.setErrorHandler(new ErrorRetrofitHandlerException())
.setEndpoint("Yout base URL")
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(new OkHttpClient())) //Http Client 
.build();