gpt4 book ai didi

request - 重试请求 onErrorResponse Android Volley

转载 作者:行者123 更新时间:2023-12-04 14:27:44 27 4
gpt4 key购买 nike

当我在 中收到错误时android volley 请求我想重试该请求。我怎样才能做到这一点?

最佳答案

好吧,您可以创建 RetryPolicy要更改默认重试行为,只需指定 timeout milliseconds , retry count参数:

public class YourRequest extends StringRequest {
public YourRequest(String url, Response.Listener<String> listener,
Response.ErrorListener errorListener) {
super(url, listener, errorListener);
setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
}

另一种方法是估计VolleyError,当if为 TimeoutError时再次重新执行相同的请求实例 :
public static void executeRequest() {
RequestQueue.add(new YourRequest("http://your.url.com/", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
// note : may cause recursive invoke if always timeout.
executeRequest();
}
}
}));
}

此时你可能会有一个疑问:“Volley 有提供一些重试回调方法吗?”,答案是“没有”。但是有一个项目叫 Netroid它基于Volley并满足前面的问题,有了它,如果您关心它,您可以进行重试回调,您可以计算重试到来时使用的时间以及此请求执行的时间,代码样式如下:
final String REQUESTS_TAG = "Request-Demo";
String url = "http://facebook.com/";
JsonObjectRequest request = new JsonObjectRequest(url, null, new Listener<JSONObject>() {
long startTimeMs;
int retryCount;

@Override
public void onPreExecute() {
startTimeMs = SystemClock.elapsedRealtime();
}

@Override
public void onFinish() {
RequestQueue.add(request);
NetroidLog.e(REQUESTS_TAG);
}

@Override
public void onRetry() {
long executedTime = SystemClock.elapsedRealtime() - startTimeMs;
if (++retryCount > 5 || executedTime > 30000) {
NetroidLog.e("retryCount : " + retryCount + " executedTime : " + executedTime);
mQueue.cancelAll(REQUESTS_TAG);
} else {
NetroidLog.e(REQUESTS_TAG);
}
}
});

request.setRetryPolicy(new DefaultRetryPolicy(5000, 20, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
request.setTag(REQUESTS_TAG);
RequestQueue.add(request);

Netroid 还具有许多其他方便和强大的功能,希望对您有足够的帮助:)。

关于request - 重试请求 onErrorResponse Android Volley ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24676738/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com