我在Android应用中使用了一个自定义的Interceptor
和Retrofit客户端,在某些特定情况下会抛出一个异常。我正试图用Kotlin的程序来使它工作。
问题是,我无法处理之前提到的错误,因为当异常从拦截器实例中抛出时,它就会使整个应用程序崩溃,而不是在coroutine的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)
我应该怎么做才能从拦截器中正确捕捉和处理这个异常呢?我是不是遗漏了什么?