繁体   English   中英

Android Volley如何暂时处理网络连接丢失?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM