[英]Android volley response listener is not called after request retry
Volley
.newRequestQueue(context)
.add(new JsonObjectRequest(
Request.Method.POST,
BuildConfig.API_URL + "/user",
userJson,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
doSthOnRequestSuccess();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
doSthOnRequestFail();
}
}));
當請求超時時,將運行ErrorListener,然后稍后Volley自動重試該請求,這次成功了。 但是,成功響應偵聽器不會運行。
例如,當用戶單擊某個按鈕時,我發出一個請求,請求失敗,因此我在屏幕上顯示一條錯誤消息,指出操作失敗。 屏幕現在處於錯誤狀態,但是Volley在后台重試該請求,它成功,但是不調用成功偵聽器代碼。 這導致屏幕保持錯誤狀態,或者用戶再次單擊該按鈕並重復請求。
我修改了volley調用的api以能夠處理重復的請求,但是有沒有辦法在android端解決此問題?
我認為,如果凌空在上次嘗試后給您回調。 這意味着,如果您將最大重試次數設置為3,並且api對於2(而不是3)失敗,那么您將繼續獲取onResponse()回調。
排球每個請求返回錯誤或成功。 這意味着在調用onErrorResponse時,您不能指望可以調用過onResponse。
最有可能發生的情況是您的重試請求失敗。 但是,服務器可能已經處理並發送了來自Volley客戶端的最后一個請求,但是數據無法按時到達。
更詳細地:
調用在BasicNetwork類中循環,直到成功或異常。 在特定異常上,在建議請求的RetryPolicy建議是傳遞異常還是忽略異常然后重試的情況下 ,調用tryRetryOnException 。 通常,這是DefaultRetryPolicy 。 從中可以看到,您只會收到Volley的最后一個回調。
但是,監視這些重試的一種方法是通過以下方式啟用標記日志:
<android-sdk>/platform-tools/adb shell setprop log.tag.Volley VERBOSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.