Ви можете встановити тайм-аути на базовому клієнті 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'
І встановіть клієнта, використовуючи шаблон конструктора:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Більше інформації в Timeouts
EDIT 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 .