android - 仅当使用改造 rxjava 的第一个 api 调用失败时如何进行另一个 api 调用
问题描述
我是改造和 rxjava 的新手。我正在尝试使用这两个来实现一个非常常见的用例,但无法找到合适的操作员来做。用例 - 我正在调用 API 来检查我的访问令牌是否有效。如果它不再有效,我会得到 401 未经授权的异常,此时我想进行 API 调用以使用刷新令牌获取新的访问令牌。注意 - 两个 API 请求的响应类型不同。
我如何使用改造和 rxjava 来实现这一点。
我尝试使用 flatMap、onErrorResume 来实现它,但无法找出最好的方法。
解决方案
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)
推荐阅读
- azure-devops - 使用 YAML Azure Pipelines 时是否可以手动触发阶段?
- sql - Crate DB - 使用 COPY TO 命令将表导出到不同的 S3 端点
- c++ - 在 Windows 命令行中运行 .exe 会在以 2 种相同方式执行时产生不同的输出
- java - 多线程中的 MQ 与 REST 性能
- python - 如果数据低于熊猫数据框中的阈值,则获取布尔值
- sql - Sum sql问题 - 里面的两列是连接的
- go - 解码base64并将其编码为十六进制
- macos - 将“无线”显示为标题的命令行
- java - 在java 7中将2个日期之间的差异转换为天数
- vhdl - 了解状态机中的干扰锁存器