【问题标题】:java.net.SocketTimeoutException with Retrofitjava.net.SocketTimeoutException 与改造
【发布时间】:2019-12-11 00:26:10
【问题描述】:

我正在使用 Retrofit 和 OkHttp 连接到服务器。 在大多数情况下,它运作良好。但在某些情况下它会失败。 有时 HTTP FAILED: java.net.UnknownHostException 有时 java.net.SocketTimeoutException。这个错误只是当我使用家庭 wifi 连接到服务器时。但是当我使用移动网络时它很好并且没有问题。 与模拟器一起使用很好。它只发生在真实设备上。只是有些时候不是所有时候。

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    httpClient.readTimeout(30, TimeUnit.SECONDS)
            .connectTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS)
            .build();



    retrofit = new Retrofit.Builder()
            .baseUrl(ClientConfigs.REST_API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(httpClient.build())
            .build();


compile 'com.squareup.retrofit2:retrofit:2.2.0'
 compile 'com.squareup.retrofit2:converter-gson:2.1.0'

【问题讨论】:

  • Stack Overflow 用于编程问题。你的问题是什么?如果您的问题是“如何避免这些错误?”,答案是“停止使用互联网”。当您发布应用程序并在各种情况下在各种网络上使用时,您会很多遇到这类问题。

标签: android retrofit socket-timeout-exception


【解决方案1】:

我猜你家的 wify 并不像看起来那样稳定。

OkHttpClient 在无法解析指定主机时抛出 UnknownHostException(例如,当您没有互联网时会发生这种情况)。

对于 SocketTimeout,OkHttp 将在请求超时时抛出此错误(例如,如果您的服务器需要超过 30 秒的时间才能发送回结果,但这也可能是您与服务器的互联网连接造成的)

【讨论】:

  • 我有同样的问题,但没有解决它的运气。已经添加了超时但没有帮助。有什么建议吗?
  • 这个答案是在 2 年前提供的,它并不是这个问题的真正解决方案。
【解决方案2】:

在我当前的项目中,我遇到了同样的问题。可能是您的网络硬件/软件有问题。我有两个路由器。使用第一个路由器,我的应用程序可以完美运行。第二个路由器位于另一个房间。当我尝试使用应用程序时,它几乎可以正常工作。但是当我去另一个房间并尝试以良好的信号发出请求时 - 我在 5 秒后收到java.net.SocketTimeoutException(我在 Retrofit 中的超时时间为 120 秒)。

【讨论】:

  • 同意你的看法。我在一台带有 Wi-Fi 的设备上也遇到了这个问题,但只是在升级应用程序之后。转向移动网络修复了该错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2023-03-09
  • 2017-11-20
  • 2020-06-27
  • 2016-07-23
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多