我不熟悉翻新和rxjava。我正在尝试使用这两个实现非常普遍的用例,但找不到合适的操作员。用例-我正在进行API调用以检查我的访问令牌是否有效。如果它不再有效,我将获得401未经授权的异常,这时我想进行API调用以使用刷新令牌来获取新的访问令牌。 注意-两个API请求的响应类型都不同。
如何使用翻新和rxjava实现此目的。
我尝试使用flatMap,onErrorResume实现它,但无法找出最佳的实现方式。
答案 0 :(得分:0)
requestApi.checkAccessToken(accessToken).flatMap(
object : Function<Response, Observable<Response>> {
override fun apply(t: Response): Observable<Response> {
if (t.code() === 400) {
return requestApi.getAccessToken(refreshToken,"refreshToken").flatMap(
object : Function<LoginResponse, Observable<Response>> {
override fun apply(t: LoginResponse): Observable<Response> {
return requestApi.checkAccessToken(t.access_token)
}
})
} else {
return Observable.just(t)
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleAccessTokenResponse, this::handleError)