我有一个使用移动互联网(通过运营商)的用例,但即时消息超出了我的数据限制。在这种情况下,我的手机认为连接可用,但是我无法打开任何网页。
因此,在此用例中,尝试通过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)
})
有人可以告诉我如何防止应用崩溃吗? 预先谢谢你。
答案 0 :(得分:1)
问题在于Kotlin doesn't force you to catch
checked exception(与SocketException
一样)是因为没有人抓住它,因此系统使您的应用程序崩溃。在Java中,您将不得不抓住它。
没有方法可以防止引发异常-这只是意味着发生了意外情况-并且不抛出异常是错误的,因此您应该在代码中的某个时刻catch
。你应该在哪里抓到它?这个问题没有绝对正确的答案,但是您应该在对它做一些有用的事情后立即抓住它,例如记录并重新抛出它或对其进行处理以允许应用程序继续运行(例如,向应用程序显示某种错误)。用户并允许他们重试该操作)。