如果Android Volley发布请求因网络丢失而失败,Android Volley会在网络连接自动恢复后重试帖子吗?它会触发所有请求尝试,等待连接重新建立还是只是触发错误并停止?
如果Android Volley在重新建立连接后没有重试,似乎我必须创建逻辑,以便每当连接丢失时我都有一个额外的队列,并且只要连接状态发生变化,它就会重试。
答案 0 :(得分:9)
根据this链接:
在Volley中没有直接指定请求超时值的方法,但是有一种解决方法,您需要在请求对象上设置RetryPolicy。 DefaultRetryPolicy类接受一个名为initialTimeout的参数,这可用于指定请求超时,确保最大重试次数为1,以便在超过超时后凌空不会重试请求。
Setting Request Timeout:
request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
如果要重试失败的请求(由于超时),您也可以使用上面的代码指定,只需增加重试次数。注意最后一个参数,它允许您指定一个退避乘数,可以用来实现一些RESTful服务推荐的“指数退避”。
该链接有很多使用Volley的有用提示和技巧。希望这有帮助!
答案 1 :(得分:8)
如果Android Volley发布请求因网络丢失而失败,Android Volley会在网络连接自动恢复后重试帖子吗?
不,它不会。根据您的申请,我可能根本不需要。
它会触发所有请求尝试,等待连接 重新建立或只是触发错误并停止?
它只会引发错误。是的,你应该自己写这种逻辑。
答案 2 :(得分:3)
如果出现IOException(例如java.net.ConnectException),Volley会不使用重试策略。 如果出现SocketTimeoutException,ConnectTimeoutException或者HTTP响应代码为401(禁止)或302(永久移动),Volley仅使用重试策略。
答案 3 :(得分:0)
if you use (AsyncHttpClient) you can try call this methode :
setMaxRetriesAndTimeout(int retries, int timeout)
Sets the maximum number of retries and timeout for a particular Request.
*
* @param retries maximum number of retries per request
* @param timeout sleep between retries in milliseconds
*/
答案 4 :(得分:0)
我遇到了这个问题,因为我尝试对方法进行凌空请求,而凌空的onErrorResponse方法再次调用该方法。例如:
@Override
public void onErrorResponse(VolleyError volleyError) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
sendOTPAgain();//this method call again and again
}
}, 1000);
}