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 .
public Gson providesGson() { return new GsonBuilder().create(); }
. Jadi saya melakukan ini:Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Di mana modul adalah turunan dari kelas yang tepat yang memiliki semua metode inicompile 'com.squareup.okhttp3:okhttp:3.x.x'
impor gradle seperti pada jawaban di bawah ini oleh TeoJawaban ini sudah usang bagi saya, jadi inilah cara kerjanya.
Tambahkan OkHttp, dalam kasus saya versinya adalah
3.3.1
:Lalu sebelum membangun Retrofit Anda, lakukan ini:
sumber
sumber
Saya menggunakan Retrofit 1.9 untuk mendapatkan XML .
Jika Anda menggunakan Retrofit 1.9.0 dan okhttp 2.6.0, tambahkan ke file Gradle Anda.
Catatan: Jika Anda perlu mengambil JSON , hapus saja dari kode di atas.
sumber
Untuk Retrofit1.9 dengan pengguna OkHttp3, ini solusinya,
sumber
sumber
Ini akan menjadi cara terbaik, untuk mengatur batas waktu untuk setiap layanan (melewati batas waktu sebagai parameter)
Dan jangan lewatkan ini untuk OkHttpClient.
Semoga ini bisa membantu siapa saja.
sumber
Saya menemukan contoh ini
https://github.com/square/retrofit/issues/1557
Di sini kami menetapkan klien koneksi klien url khusus sebelum sebelum kami membangun implementasi layanan rest API.
sumber
sumber