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



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

如果 Android Volley 在重新建立连接后没有重试,似乎我将不得不创建逻辑,以便在连接丢失时我有一个额外的队列,并且每当连接状态更改时都会重试。

根据此链接:

在 Volley 中没有直接指定请求超时值的方法,但有一个解决方法,您需要在请求对象上设置 RetryPolicy。类采用一个名为 initialTimeout 的参数,这可用于指定请求超时,确保最大重试计数为 1,以便在超过超时后 Volley 不会重试请求。

Setting Request Timeout:
request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));

如果要重试失败的请求(由于超时),也可以使用上面的代码指定,只需增加重试计数即可。请注意最后一个参数,它允许您指定一个退避乘数,该回退乘数可用于实现某些 RESTful 服务推荐的"指数退避"。

该链接有很多使用凌空的有用提示和技巧。希望这有帮助!

如果安卓排版帖子请求因网络丢失而失败,安卓排版会在网络连接自动恢复后重试帖子吗?

不,不会。根据您的应用程序,我什至可能不需要。

它会触发所有请求尝试,等待连接到 重新建立或只是触发错误并停止?

它只是抛出一个错误。是的,你应该自己写这种逻辑。

如果出现IOException(例如.java.net.ConnectException),Volley不使用重试策略。Volley 仅在 SocketTimeoutException、ConnectTimeoutException 或 HTTP 响应代码为 401(禁止)或 302(永久移动)的情况下使用重试策略。

如果你使用(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
 */

我遇到了这个问题,因为我尝试对一种方法进行凌空请求,并且凌空错误响应方法再次调用该方法。

     @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);
        }

最新更新