android - RxJava Retrofit2 api 使用 subscribe 或 flatmap 多次调用
问题描述
我正在使用 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 调用的结果是否可迭代?
解决方案
我想你想要这样的东西:
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) }
推荐阅读
- snmp - 华为服务器oid不显示| RH2288
- lua - 调用 String.pack 返回未找到打包方法
- python - 如何在 Tensorflow 中动态创建列表
- javascript - 切换 HTML 选择框值时如何隐藏/显示 HTML 输入框?
- python - 如何将 datetime.time() 对象转换为 datetime.datetime 对象 pandas
- python - tf.data.Dataset:将字符串拆分并转换为整数数组
- python - 熊猫拉错列
- c# - C# winforms 中 INSERT INTO Oledb 命令的语法错误
- jquery - 如何使用jquery将输入字段名称作为数组获取
- javascript - React 中的玩笑测试