在Volley中重新登录并重试请求

时间:2014-04-23 17:23:39

标签: android android-volley

如果我从服务器收到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来源中进行修改?

1 个答案:

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