【问题标题】:How to stop retrying request on 401 using volley and okhttp如何使用 volley 和 okhttp 停止重试 401 请求
【发布时间】:2013-08-20 09:50:49
【问题描述】:

我在我的应用程序中使用新的(ish)volley 库进行联网。我与之通信的服务器有时会返回 401,但没有适当的质询标头,这是无法更改的。

我开始使用OkHttp 作为 volley 的传输层,因为我实际上需要读取响应,并且当我收到 401 时抛出异常。现在,尽管每当我收到 401 时,请求都会自动重试一次它到达了我的错误监听器。这对我来说是有问题的,因为 401 中的响应在第二个请求上发生了变化,而这就是我可以访问的那个。

有什么办法可以改变它,使它在收到 401 时不会自动重试,或者仅使用 volley 访问响应?

【问题讨论】:

  • 或许,您可以尝试将 DefaultRetryPolicy.DEFAULT_MAX_RETRIES 从 1 更改为 0?但是,这将禁用所有重试,而不仅仅是 401 错误。
  • 我想你在这里回答了你自己的问题:stackoverflow.com/questions/18345174/… 回答你自己的问题没有错,你应该在这里发帖。
  • 我很确定这是两个不同的问题。这是为了防止 volley 重试特定错误。

标签: android android-volley


【解决方案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");
        }
    }

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2020-03-28
    相关资源
    最近更新 更多