【问题标题】:How to set the whole timeout in OkHttpClient?如何在 OkHttpClient 中设置整个超时?
【发布时间】:2018-09-19 13:03:30
【问题描述】:

我试图用谷歌搜索相关问题,但没有运气。我知道如何设置 connectionTimeout、readTimeout、writeTimeout,但我想为这些值设置整个超时,因为有时这三个值之间的值是不同的。

类似的是这个

How to set connection timeout with OkHttp

但我想要的是那种东西

builder.allTimeout(50, TimeUnit.SECONDS)

【问题讨论】:

    标签: java android okhttp3 okhttp


    【解决方案1】:

    我找不到任何可以为所有人设置超时的方法,您可以在文档中查看它。

    http://square.github.io/okhttp/3.x/okhttp/

    此外,我找不到你为什么要实现这一目标的理由。

    尝试以下可能解决您的问题的解决方法。

    初始化一个常量值

    final int ALL_TIMEOUT = 30;
    
    new OkHttpClient().newBuilder() 
        .readTimeout(ALL_TIMEOUT, TimeUnit.SECONDS)
        .connectTimeout(ALL_TIMEOUT, TimeUnit.SECONDS);
        .writeTimeout(ALL_TIMEOUT, TimeUnit.SECONDS);
    

    创建一个包装器,它将初始化您的构建器,并为所有超时传递一个值,包装器将自行初始化所有超时并为您提供构建器对象。

    【讨论】:

      【解决方案2】:
      OkHttpClient.Builder builder = new OkHttpClient().newBuilder() 
          .readTimeout(30, TimeUnit.SECONDS)
          .connectTimeout(30, TimeUnit.SECONDS);
      

      【讨论】:

      • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
      【解决方案3】:

      在我的情况下,问题在于我有一个 SSL 实现,并且我正在创建自定义 OkHttpClient,它覆盖了我的进一步实现。我在那里设置了超时,但我无法更改它。我已经忘记了它并花了很多时间来找到简单的问题。查看您自己的代码并检查是否没有其他 OkHttpClient 实现覆盖您的超时。

      【讨论】:

        猜你喜欢
        • 2017-01-10
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 2019-03-18
        • 2018-07-21
        • 2020-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多