【发布时间】:2018-04-11 10:12:54
【问题描述】:
我正在努力在 RxJava2 中正确处理异常。我正在尝试在OkHttp3 拦截器中刷新我的令牌,如下所示:
tokenRepository.refreshToken(authStateManager.current.refreshToken!!)
.doOnError {
Log.w(TAG, "Could not obtain new access token.")
authStateManager.signOut()
}
.subscribe { tokenResponse ->
Log.d(TAG, "Obtained new access token: " + tokenResponse.toString())
authStateManager.updateAfterTokenResponse(TokenResponse.jsonDeserialize(tokenResponse.toString()), null)
token = authStateManager.current.accessToken
}
如果刷新令牌有效并且请求返回 200,它会很好地工作。但是如果刷新令牌无效并且我收到一些错误代码(例如 400),则执行 doOnError 块,但它会继续执行引发以下异常的订阅块:
retrofit2.adapter.rxjava2.HttpException: HTTP 400
at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:54)
at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
...
我尝试使用onErrorReturn 和onErrorResumeNext,但我想完全跳过订阅块(如果出现错误,只需注销用户,不要尝试做任何事情)。可能吗? refreshToken 方法返回 Single<JsonObject> 类型的响应。
【问题讨论】: