RxJava Retrofit2 api 使用 subscribe 或 flatmap 多次调用
Posted
技术标签:
【中文标题】RxJava Retrofit2 api 使用 subscribe 或 flatmap 多次调用【英文标题】:RxJava Retrofit2 api multiple calls using subscribe or flatmap 【发布时间】:2021-03-22 03:09:28 【问题描述】:我正在使用 Retrofit2 和 RxJava 进行 API 调用。问题是我想使用从第一个 api 调用收到的响应(在本例中为整数)进行第二个 API 调用。我怀疑这两个
Disposable subscribe(@NonNull Consumer<? super T> onSuccess, @NonNull Consumer<? super Throwable> onError)
方法和
<R> Single<R> flatMap(@NonNull Function<? super T, ? extends SingleSource<? extends R>> mapper
看起来能够使用第一个 api 调用的结果来调用第二个 api 调用。那么,我应该使用哪种方法(subscribe
或flatMap
)来进行第二次 api 调用,结果是第一次调用,为什么?我是否必须使用一个或另一个取决于第一个 api 调用的结果是否可迭代?
【问题讨论】:
【参考方案1】:我想你想要这样的东西:
fun firstRequest(): Single<Int> = Single.just(10)
fun secondRequest(valueFromFirst: Int): Single<Int> = Single.just(valueFromFirst*2)
fun mappedRequest(): Single<Int>
return firstRequest().flatMap
secondRequest(it)
所以,现在您可以从任何地方访问 mappedRequest()。您可以通过以下方式“准备”您的请求:
val requestSingle = mappedRequest()
在这种情况下,您只有一个。该请求尚未运行,但已准备好运行。为了有效地运行它:
requestSingle.subscribe handleResult(it)
【讨论】:
那么,我想,你可以确认我 flatMap 是这个用例的最佳选择,对吧? 是的,我想是的。还有其他选择,例如订阅第一个,它将订阅第二个。但是使用 flatMap 的 IMO 要好得多,因为我们可以将所有逻辑放在一个地方。以上是关于RxJava Retrofit2 api 使用 subscribe 或 flatmap 多次调用的主要内容,如果未能解决你的问题,请参考以下文章
RxJava2+Retrofit2+RxLifecycle2使用MVP模式构建项目
android查询天气demo,基于mvp+kotlin+rxjava2+room+retrofit2