[英]How does Android Volley handle temporarily loss of network connection?
如果Android Volley发布请求因网络丢失而失败,Android Volley会在网络连接自动恢复后重试帖子吗? 它会触发所有请求尝试,等待连接重新建立还是只是触发错误并停止?
如果在重新建立连接后Android Volley没有重试,似乎我将不得不创建逻辑,以便在连接丢失时我有一个额外的队列,并且每当连接状态改变时它将重试。
根据这个链接:
在Volley中没有直接指定请求超时值的方法,但是有一种解决方法,您需要在请求对象上设置RetryPolicy。 DefaultRetryPolicy类接受一个名为initialTimeout的参数,该参数可用于指定请求超时,确保最大重试次数为1,以便在超过超时后凌空不会重试请求。
Setting Request Timeout:
request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
如果要重试失败的请求(由于超时),您也可以使用上面的代码指定,只需增加重试次数。 注意最后一个参数,它允许您指定一个退避乘数,可用于实现某些RESTful服务建议的“指数退避”。
该链接有很多使用Volley的有用提示和技巧。 希望这可以帮助!
如果Android Volley发布请求因网络丢失而失败,Android Volley会在网络连接自动恢复后重试帖子吗?
不,它不会。 根据您的应用,我可能根本不需要。
它会触发所有请求尝试,等待连接重新建立还是只是触发错误并停止?
它只是抛出一个错误。 是的,你应该自己写这种逻辑。
如果一个IOException出现(如java.net.ConnectException),排球不使用重试策略。 如果出现SocketTimeoutException,ConnectTimeoutException或者HTTP响应代码为401(禁止)或302(永久移动),Volley仅使用重试策略。
如果您使用(AsyncHttpClient),您可以尝试调用此方法:
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
*/
我有这个问题,因为我尝试在一个方法上的凌空请求和onleyResponse方法的volley再次调用该方法。例如:
@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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.