Anda dapat mengatur batas waktu pada klien HTTP yang mendasarinya. Jika Anda tidak menentukan klien, Retrofit akan membuatnya dengan koneksi default dan batas waktu baca. Untuk mengatur batas waktu Anda sendiri, Anda perlu mengonfigurasi klien Anda sendiri dan menyediakannya ke InternetRestAdapter.Builder
.
Opsi adalah menggunakan klien OkHttp , juga dari Square.
1. Tambahkan ketergantungan perpustakaan
Di build.gradle, sertakan baris ini:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Di mana x.x.x
versi perpustakaan yang diinginkan.
2. Atur klien
Misalnya, jika Anda ingin menetapkan batas waktu 60 detik, lakukan cara ini untuk Retrofit sebelum versi 2 dan Okhttp sebelum versi 3 ( UNTUK VERSI YANG BARU, LIHAT EDIT ):
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();
}
EDIT 1
Untuk versi okhttp sejak itu 3.x.x
, Anda harus mengatur ketergantungan seperti ini:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
Dan atur klien menggunakan pola builder:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Info lebih lanjut di Timeout
EDIT 2
Versi retrofit 2.x.x
juga menggunakan pola builder, jadi ubah blok balik di atas menjadi ini:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Jika menggunakan kode seperti providesRestAdapter
metode saya , maka ubah jenis metode pengembalian ke Retrofit .
Info lebih lanjut di Retrofit 2 - Panduan Upgrade dari 1.9
ps: Jika minSdkVersion Anda lebih besar dari 8, Anda dapat menggunakan TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Untuk detail lebih lanjut tentang unit, lihat TimeUnit .