如果启用了连接,则OkHttp连接将重置

时间:2018-12-18 10:03:48

标签: android retrofit2 okhttp

我有一个使用移动互联网(通过运营商)的用例,但即时消息超出了我的数据限制。在这种情况下,我的手机认为连接可用,但是我无法打开任何网页。

因此,在此用例中,尝试通过retrofit2和Okhttp进行调用时,我收到SocketException(连接重置)。

在我的代码应用中,“返回”行崩溃:

.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)
        })

有人可以告诉我如何防止应用崩溃吗? 预先谢谢你。

1 个答案:

答案 0 :(得分:1)

问题在于Kotlin doesn't force you to catch checked exception(与SocketException一样)是因为没有人抓住它,因此系统使您的应用程序崩溃。在Java中,您将不得不抓住它。

没有方法可以防止引发异常-这只是意味着发生了意外情况-并且不抛出异常是错误的,因此您应该在代码中的某个时刻catch。你应该在哪里抓到它?这个问题没有绝对正确的答案,但是您应该在对它做一些有用的事情后立即抓住它,例如记录并重新抛出它或对其进行处理以允许应用程序继续运行(例如,向应用程序显示某种错误)。用户并允许他们重试该操作)。