我正在使用自定义Interceptor
与我的 Android 应用程序中的 Retrofit 客户端一起,在某些特定情况下会引发异常。我正在尝试使用 Kotlin 协程使其工作。
问题是我无法处理前面提到的错误,因为在拦截器实例中抛出异常的那一刻,它使整个应用程序崩溃,而不是被协程捕获try/catch
陈述。当我使用 Rx 实现时,异常被完美地传播到onError
回调,我能够按照我需要的方式处理它。
我想这在某种程度上与用于网络调用的底层线程有关,请从进行调用的位置、抛出异常之前的拦截器以及堆栈跟踪查看下面的日志:
2019-11-04 17:17:34.515 29549-29729/com.app W/TAG: Running thread: DefaultDispatcher-worker-1
2019-11-04 17:17:45.911 29549-29834/com.app W/TAG: Interceptor thread: OkHttp https://some.endpoint.com/...
2019-11-04 17:17:45.917 29549-29834/com.app E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.app, PID: 29549
com.app.IllegalStateException: Passed refresh token can\'t be used for refreshing the token.
at com.app.net.AuthInterceptor.intercept(AuthInterceptor.kt:33)
为了能够正确地从拦截器捕获并处理此异常,我应该做什么?我错过了什么吗?
你应该子类化IOException
并使用它将信息从拦截器发送到您的调用代码。
我们考虑其他例外情况,例如IllegalStateException
应用程序崩溃,并且不要通过线程边界发送它们,因为我们不想让大多数调用者承担捕获它们的负担。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)