android - 启动器应用程序上的 Okhttp SocketTimeoutException
问题描述
我有一个应用程序是Android的默认启动器。
当我重新启动手机时,应用程序运行,然后尝试进行 http 调用并收到此异常:
HTTP FAILED: java.net.SocketTimeoutException: failed to connect to XXXX (port 80) from localAddress.getAddress() (port 42208) after 30000ms
如果我离开应用程序并返回它,http 调用就会开始工作。
这是我的客户端设置:
val client = OkHttpClient.Builder()
client.connectTimeout(30, TimeUnit.SECONDS)
client.readTimeout(30, TimeUnit.SECONDS)
client.writeTimeout(30, TimeUnit.SECONDS )
client.retryOnConnectionFailure(true)
client.connectionPool(ConnectionPool(0, 5, TimeUnit.MINUTES))
client.protocols(listOf(Protocol.HTTP_1_1))
val retrofit = Retrofit.Builder()
.client(client.build())
.addCallAdapterFactory(
RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(
GsonConverterFactory.create())
.baseUrl(base_url)
.build()
设备:小米红米8a
操作系统:MIUI 10.3.3.0 Android 9
改造:2.7.2
OKHttp:4.4.0
解决方案
我遇到了类似的问题。不确定这是您的答案,但我希望它能解决您的问题。
如果我错了,您正在尝试使用 RxJava2 获取数据。根据this document- error handling documentation。disposed
文档告诉 throwable 错误在 observable /之后无法处理terminated
这意味着当你的Single
/Observable
被调用时onComplete()
,有时它会携带一个错误并抛出UndeliverableException
,SocketTimeoutException
或其他Exception
s。我们SocketTimeoutException
在 Firebase Crashlytics 中遇到了很多问题。
我们已经处理了在我们的AppApplication
类中添加这一行 [ onCreate()
] -
RxJavaPlugins.setErrorHandler { error: Throwable ->
Timber.e(error) // you can do some task with the Throwable here if you need
}
我希望,它会有所帮助...... :)
推荐阅读
- android - 当firebase中的实时数据库从开/关更改时更新切换按钮状态
- javascript - Javascript。为什么这个条件 s[i+1] 不会给出“超出范围”的错误?
- javascript - 使用 Konva,我如何选择和转换图像?
- android - NoClassDefFoundError:解析失败:Lorg/apache/http/ProtocolVersion
- python - python函数在根据需要打印数据时返回none
- android - 如何在“TextInputLayout”的右端动态添加一个drawable?
- ios - 禁用后退按钮导航操作
- python - Python中优化问题的约束系统的矩阵形式
- node.js - AWS SDK 响应未显示在 Lambda 函数中
- woocommerce - 是否可以更改“fooevents”ticketID 格式?