如果启用连接,则 OkHttp 连接重置
OkHttp Connection reset if connection is enabled
我有一个用例,我正在使用移动互联网(通过运营商),但我超过了我的数据限制。在这种情况下,我的 phone 看到连接可用,但我无法打开任何网页。
所以在这个用例中,我在尝试使用 retrofit2 和 Okhttp 进行调用时收到 SocketException(连接重置)。
在我的代码中,应用程序在 "return" 行崩溃:
.addInterceptor(Interceptor {
val newRequest = it.request().newBuilder()
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.header("Authorization", "${App.sessionManager.tokenType} ${App.sessionManager.accessToken}")
.build()
return@Interceptor it.proceed(newRequest)
})
谁能告诉我如何防止应用崩溃?
提前谢谢你。
问题是 Kotlin doesn't force you to catch
checked exception – 就像 SocketException
一样 – 由于没有人捕获它,系统使您的应用程序崩溃。在 Java 中,您将被迫抓住它。
没有办法阻止异常被抛出——它只是意味着发生了意想不到的事情——不抛出它是错误的,所以你应该 catch
在你的代码中的某个点.你应该在哪里捕捉它?这个问题没有绝对正确的答案,但是你应该在你可以用它做一些有用的事情时尽快抓住它,比如记录并重新抛出它或处理它允许应用程序的流程继续(例如,向用户并允许他们重试该操作)。
我有一个用例,我正在使用移动互联网(通过运营商),但我超过了我的数据限制。在这种情况下,我的 phone 看到连接可用,但我无法打开任何网页。
所以在这个用例中,我在尝试使用 retrofit2 和 Okhttp 进行调用时收到 SocketException(连接重置)。
在我的代码中,应用程序在 "return" 行崩溃:
.addInterceptor(Interceptor {
val newRequest = it.request().newBuilder()
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.header("Authorization", "${App.sessionManager.tokenType} ${App.sessionManager.accessToken}")
.build()
return@Interceptor it.proceed(newRequest)
})
谁能告诉我如何防止应用崩溃? 提前谢谢你。
问题是 Kotlin doesn't force you to catch
checked exception – 就像 SocketException
一样 – 由于没有人捕获它,系统使您的应用程序崩溃。在 Java 中,您将被迫抓住它。
没有办法阻止异常被抛出——它只是意味着发生了意想不到的事情——不抛出它是错误的,所以你应该 catch
在你的代码中的某个点.你应该在哪里捕捉它?这个问题没有绝对正确的答案,但是你应该在你可以用它做一些有用的事情时尽快抓住它,比如记录并重新抛出它或处理它允许应用程序的流程继续(例如,向用户并允许他们重试该操作)。