簡體   English   中英

重試請求后未調用Android Volley響應偵聽器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM