android - 如何使用 rxJava2 在一个请求中发出两个请求
问题描述
我正在我的 Android 应用程序中访问服务器。我想获取我的朋友列表和不同查询中的朋友请求列表。他们必须同时来。然后我想在屏幕上显示这些数据。
我尝试使用 flatMap 从两个查询中获取数据。
interactor.getColleagues()
并interactor.getTest()
返回数据类型Observable<List<Colleagues>>
private fun loadColleaguesEmployer() {
if (disposable?.isDisposed == true) disposable?.dispose()
//запрос на список друзей
interactor.getColleagues(view.getIdUser() ?: preferences.userId)
.subscribeOn(Schedulers.io())
.flatMap {
interactor.getTest().subscribeOn(Schedulers.io())
.doOnNext {
result-> view.showTest(mapper.map(result))
}
}
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onNext = { result1 ->
//Обработка списка коллег работодателей
view.showColleagues(mapper.map(result1.filter { data -> data.typeFriend == "Работодатель" }))
},
onError = { it.printStackTrace() }
)
}
我想同时获取和处理来自不同查询的数据。
解决方案
Zip 通过指定的函数将多个 Observable 的发射组合在一起
您可以使用Zip (rx Java) http://reactivex.io/documentation/operators/zip.html,一些 sudo 代码将是这样的 -
val firstApiObserver = apIs.hitFirstApiFunction(//api parameters)
val secondApiObserver = apIs.hitSecondApiFunction(//api parameters)
val zip: Single<SubscriptionsZipper>//SubscriptionsZipper is the main model which contains first& second api response model ,
zip = Single.zip(firstApiObserver, secondApiObserver, BiFunction { firstApiResponseModel,secondApiResponseModel -> SubscriptionsZipper(firstApiResponseModelObjectInstance, secondApiResponseModelObjectInstance) })
zip.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(object : SingleObserver<SubscriptionsZipper> {
override fun onSubscribe(d: Disposable) {
compositeDisposable.add(d)
}
override fun onSuccess(subscriptionsZipper: SubscriptionsZipper) {
Utils.hideProgressDialog()
//here you will get both api response together
}
override fun onError(e: Throwable) {
Utils.hideProgressDialog()
}
})
希望对你有帮助。
推荐阅读
- python - Python Pandas 将分组结果转换为新列表和 JSON
- c - “结构被复制,数组被别名”这是什么意思?
- javascript - 如何在 HTML 中制作一个将通过电子邮件发送网站当前页面的按钮?
- node.js - mongodb中的动态问答树结构
- c++ - 为什么这个结构需要 24 个字节
- actionscript-3 - 我无法在照片库的某些页面上绘图
- javascript - Nodejs path.resolve 未定义
- python - 如何在pyspark中将2列聚合到地图中
- python - Python Pandas:组合数据框后查找“办公用品”类别的总销售额
- javascript - 无法计算购物车中的总数