Вы можете установить таймауты на базовом 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 .