android - RxJava 分别订阅多个 observables 和一起订阅
问题描述
我有两个网络请求。
fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>
我想做的是...
- 启动时显示加载屏幕。这两个请求应该独立工作。
- 随着每个请求的完成,显示的结果都会更新。
- 当所有请求终止时隐藏加载屏幕。
我有处理加载页面的函数:
fun showLoadingScreen()
fun hideLoadingScreen()
并操纵视图:
fun showPostDetails(post)
fun showComments(comments)
我已经尝试过这种方式 - 订阅每个,也订阅合并一个:
postDetail = getPostDetail(postId)
getComments = getComments(postId)
postDetail.subscribe()
getComments.subscribe()
Single.merge(postDetail, getComments).subscribe()
在这种情况下,它发出多个请求而不是一次。
解决此类问题的最佳方法是什么?我可以用它CountDownLatch
来计算每个请求的完成情况,但是在 RxJava 中还有其他解决方案吗?
解决方案
您可以尝试使用doOnSuccess
postDetail = getPostDetail(postId).doOnSuccess { showPostDetails(it) }
getComments = getComments(postId).doOnSuccess { showComments(it) }
然后合并它们
Single.merge(postDetail, getComments)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
showLoadingScreen()
}
.doOnTerminate {
hideLoadingScreen()
}
.subscribe()
推荐阅读
- javascript - 如何在开始时显示一个空图表并在按钮单击时填充值
- php - Symfony Panther - 访问安全的 iframe?
- reactjs - 获取“'AsyncThunkAction<*> 类型的参数不可分配给'Action 类型的参数
" 当使用自定义类型的 useAppDispatch 钩子时 - ios - Siri Shortcuts 可以处理动态短语和变量吗
- java - 使用 Gson 库将 JSON 消息解析为 Java Pojo,同时将 JSON 映射到字符串字段
- google-sheets - Google Sheets api append 方法没有在最后一行之后添加一行
- reactjs - 使用 React-Hook-Form V7 在 DatePicker Antd 中设置默认值
- python - 重置函数python的返回值
- html - Twitch-API ruby gem 更新视图计数缓慢,如何获取实时流数据?
- c# - 操作成功时如何打印消息?