Я использую пользовательский Interceptor
вместе с клиентом Retrofit в своем приложении для Android, которое выдает исключение при определенных обстоятельствах. Я пытаюсь заставить его работать, используя сопрограммы Kotlin.
Проблема в том, что я не могу обработать вышеупомянутую ошибку, так как в момент, когда исключение выдается из экземпляра Interceptor, происходит сбойцелое приложение вместо того, чтобы быть пойманным в операторе try/catch
сопрограммы. Пока я использовал реализацию Rx, исключение было безупречно передано в обратный вызов onError
, где я смог обработать его так, как мне было нужно.
Я полагаю, это как-то связано с базовыми потоками, которые используются для сетевого вызова, см. Журналы ниже от места, где выполняется вызов, от перехватчика непосредственно перед выдачей исключения, иstacktrace:
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)
Что я должен сделать, чтобы иметь возможность правильно перехватить и обработать это исключение от Перехватчика? Я что-то упустил?