Вы можете установить таймауты на базовом HTTP-клиенте. Если вы не укажете клиент, Retrofit создаст его с тайм-аутами подключения и чтения по умолчанию. Чтобы установить собственные таймауты, вам нужно настроить свой собственный клиент и предоставить его RestAdapter.Builder
.
Можно использовать клиент OkHttp , также из Square.
1. Добавьте библиотечную зависимость
В build.gradle включите эту строку:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Где x.x.x
находится нужная версия библиотеки.
2. Установите клиент
Например, если вы хотите установить тайм-аут 60 секунд, сделайте так для Retrofit до версии 2 и Okhttp до версии 3 ( ДЛЯ НОВЫХ ВЕРСИЙ, СМОТРИТЕ РЕДАКТЫ ):
public RestAdapter providesRestAdapter(Gson gson) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.build();
}
РЕДАКТИРОВАТЬ 1
Для версий okhttp с тех пор 3.x.x
вы должны установить зависимость следующим образом:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
И установите клиент, используя шаблон builder:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Больше информации в Тайм-аутах
РЕДАКТИРОВАТЬ 2
В модифицированных версиях 2.x.x
также используется шаблон компоновщика, поэтому измените приведенный выше блок возврата на этот:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Если используется код, подобный моему providesRestAdapter
методу, измените тип возвращаемого метода на Retrofit .
Больше информации в Retrofit 2 - Руководство по обновлению с 1.9
ps: если ваш minSdkVersion больше 8, вы можете использовать TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Для получения более подробной информации о единицах см. TimeUnit .
public Gson providesGson() { return new GsonBuilder().create(); }
. Поэтому я делаю этоGson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Где модуль является экземпляром надлежащего класса, который имеет все эти методыcompile 'com.squareup.okhttp3:okhttp:3.x.x'
импорт gradle, как в ответе ниже от TeoЭти ответы были для меня устаревшими, так что вот как это получилось.
Добавьте OkHttp, в моем случае версия
3.3.1
:Затем, прежде чем строить свою модификацию, сделайте это:
источник
источник
Я использую Retrofit 1.9 для получения XML .
Если вы используете Retrofit 1.9.0 и okhttp 2.6.0, добавьте в свой файл Gradle.
Примечание: если вам нужно получить JSON , просто удалите из кода выше.
источник
Для Retrofit1.9 с пользователями OkHttp3, вот решение,
источник
источник
Это будет наилучший способ установить время ожидания для каждой службы (передавая время ожидания в качестве параметра)
И не пропустите это для OkHttpClient.
Надеюсь, это кому-нибудь поможет.
источник
Я нашел этот пример
https://github.com/square/retrofit/issues/1557
Здесь мы устанавливаем пользовательский клиент подключения клиента URL-адреса прежде, чем мы создадим реализацию службы отдыха API.
источник
источник