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在后台重试请求,它成功,但不调用成功侦听器代码。这会导致屏幕保持错误状态,或者用户再次单击该按钮并发出重复请求。
我修改了voli调用能够处理重复请求的api,但有没有办法在android端解决这个问题?
答案 0 :(得分:1)
我认为如果凌空在最后一次尝试后给你回调。这意味着如果你设置的最大重试次数为3,api失败为2而不是3,那么你将获得onResponse()回调。
答案 1 :(得分:1)
Volley为每个请求返回错误或成功。这意味着当调用onErrorResponse时,您不能指望可以调用onResponse。
最有可能的情况是您的重试请求失败。但是,服务器可能已处理并从您的Volley客户端发送了最后一个请求,但数据无法按时到达。
更详细:
调用在BasicNetwork类中循环,直到成功或异常。在特定异常attemptRetryOnException被调用,其中建议请求的RetryPolicy是否传递异常或忽略它并重试。通常这是DefaultRetryPolicy。 从那里你可以看到你将从Volley获得最后一次回调。
然而,监控这些重试的一种方法是通过以下方式启用标记日志:
<android-sdk>/platform-tools/adb shell setprop log.tag.Volley VERBOSE