Saya menggunakan kerangka kerja Volley baru untuk Android untuk melakukan permintaan ke server saya. Tapi itu habis sebelum mendapatkan respons, meskipun itu merespons.
Saya mencoba menambahkan kode ini:
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);
di HttpClientStack
kerangka Volley ke integer yang berbeda (50.000), tetapi masih keluar sebelum 50 detik.
Apakah ada cara untuk mengubah batas waktu ke nilai yang panjang?
android
timeout
android-volley
Cissmayazz
sumber
sumber
HttpClient
kelas.Jawaban:
Lihat
Request.setRetryPolicy()
dan konstruktor untukDefaultRetryPolicy
, misalnyasumber
Untuk menangani Timeout Android Volley yang perlu Anda gunakan
RetryPolicy
Coba LagiPolicy
RetryPolicy
adalah antarmuka tempat Anda perlu menerapkan logika tentang bagaimana Anda ingin mencoba kembali permintaan tertentu ketika terjadi timeout.Ini berkaitan dengan tiga parameter ini
Misalnya Jika RetryPolicy dibuat dengan nilai-nilai ini
Coba lagi Mencoba 1:
Coba lagi Mencoba 2:
Jadi pada akhir Coba Lagi 2 jika masih terjadi Socket Timeout, Volley akan melempar ke
TimeoutError
dalam pengendali respons Kesalahan UI Anda.sumber
RetryPolicy
sebenarnya dilakukan oleh implementasi.new DefaultRetryPolicy(
dan pastikan untuk tidak pernah menggunakan kembali suatuRetryPolicy
objek, karena objek direferensikan melalui semua proses permintaan, dan coba lagi kenaikan ditambahkan atas nilai batas waktu objek yang sama, sehingga membuat waktu tunggu permintaan Anda di masa mendatang tumbuh tanpa batasHanya berkontribusi dengan pendekatan saya. Seperti yang sudah dijawab,
RetryPolicy
adalah jalan yang harus ditempuh. Tetapi jika Anda memerlukan kebijakan yang berbeda dari standar untuk semua permintaan Anda, Anda bisa mengaturnya dalam kelas Permintaan dasar, jadi Anda tidak perlu mengatur kebijakan untuk semua contoh permintaan Anda.Sesuatu seperti ini:
Dalam kasus saya, saya memiliki GsonRequest yang memanjang dari BaseRequest ini, jadi saya tidak mengambil risiko lupa mengatur kebijakan untuk permintaan tertentu dan Anda masih bisa menimpanya jika beberapa permintaan spesifik mengharuskannya.
sumber
sumber
Anda dapat mengatur
MY_SOCKET_TIMEOUT_MS
sebagai 100. Apa pun yang Anda ingin atur ini dalam milidetik.DEFAULT_MAX_RETRIES
bisa 0 default adalah 1.sumber
sumber
Cara lain untuk melakukannya adalah di custom JsonObjectRequest oleh:
Sumber: Contoh Voli Android
sumber
Solusi alternatif jika semua solusi di atas tidak bekerja untuk Anda
Secara default, Volley menetapkan batas waktu sama untuk keduanya
setConnectionTimeout()
dansetReadTimeout()
dengan nilai dariRetryPolicy
. Dalam kasus saya,Volley
melempar pengecualian batas waktu untuk potongan data besar, lihat:Solusi saya adalah membuat kelas yang diperluas
HttpStack
dengansetReadTimeout()
kebijakan saya sendiri . Kemudian gunakan saat membuatRequestQueue
sebagai berikut:sumber
Saya akhirnya menambahkan metode
setCurrentTimeout(int timeout)
untukRetryPolicy
dan implementasi itu diDefaultRetryPolicy
.Kemudian saya menambahkan
setCurrentTimeout(int timeout)
di kelas Permintaan dan menyebutnya.Ini sepertinya melakukan pekerjaan.
Maaf untuk kemalasan saya dan omong-omong untuk sumber terbuka.
sumber