如果我从服务器收到401错误,我需要自动重新登录和重试请求(如果成功)。我正在使用Volley lib。从Volley来源我可以看出它在while(true)循环中运行,直到它得到响应或异常:
@Override
public NetworkResponse performRequest(Request<?> request){
while (true) {
try {
httpResponse = mHttpStack.performRequest(request, headers);
return httpResponse;
} catch (IOException e) {
statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_UNAUTHORIZED || statusCode == HttpStatus.SC_FORBIDDEN) {
attemptRetryOnException("auth", request, new AuthFailureError(networkResponse));
}
}
}
}
但是我想停止这个循环,直到我成功登录响应,然后继续尝试获得响应。
有没有办法在自定义RetryPolicy中进行,而不会在Volley来源中进行修改?
答案 0 :(得分:1)
实施自己的RetryPolicy
并覆盖public void retry(VolleyError error)
方法,如下所示:
@Override
public void retry(VolleyError error) throws VolleyError {
if (error.networkResponse.statusCode == HttpStatus.SC_UNAUTHORIZED)
{
throw new VolleyError("Client is not authorized, retry is pointless");
}
}