要处理 Android Volley Timeout,您需要使用RetryPolicy
重试策略
- Volley 提供了一种简单的方法来为您的请求实现 RetryPolicy。
- Volley 将所有请求的默认 Socket & ConnectionTImeout 设置为 5 秒。
RetryPolicy
是一个接口,您需要在其中实现在发生超时时如何重试特定请求的逻辑。
它处理这三个参数
- Timeout - 以毫秒为单位指定每次重试尝试的套接字超时。
- 重试次数 - 尝试重试的次数。
- Back Off Multiplier - 一个乘数,用于确定每次重试尝试设置为套接字的指数时间。
例如。如果使用这些值创建 RetryPolicy
超时 - 3000 毫秒,重试次数 - 2,退避乘数 - 2.0
重试 1:
- 时间 = 时间 + (时间 * 后退乘数);
- 时间 = 3000 + 6000 = 9000 毫秒
- 套接字超时 = 时间;
- 请求以 9 秒的 Socket 超时分派
重试 2:
- 时间 = 时间 + (时间 * 后退乘数);
- 时间 = 9000 + 18000 = 27000 毫秒
- 套接字超时 = 时间;
- 使用 27 秒的 Socket 超时分派请求
因此,在重试尝试 2结束时,如果仍然发生 Socket Timeout,Volley 将TimeoutError
在您的 UI 错误响应处理程序中抛出一个。
//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions.
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));