如果启用连接,则 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 在你的代码中的某个点.你应该在哪里捕捉它?这个问题没有绝对正确的答案,但是你应该在你可以用它做一些有用的事情时尽快抓住它,比如记录并重新抛出它或处理它允许应用程序的流程继续(例如,向用户并允许他们重试该操作)。