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

时间:2014-02-07 12:51:13

标签: android networking post request android-volley

如果Android Volley发布请求因网络丢失而失败,Android Volley会在网络连接自动恢复后重试帖子吗?它会触发所有请求尝试,等待连接重新建立还是只是触发错误并停止?

如果Android Volley在重新建立连接后没有重试,似乎我必须创建逻辑,以便每当连接丢失时我都有一个额外的队列,并且只要连接状态发生变化,它就会重试。

5 个答案:

答案 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);
        }