gpt4 book ai didi

android - RxJava 分别和一起订阅多个 observable

转载 作者:行者123 更新时间:2023-11-29 23:16:35 25 4
gpt4 key购买 nike

我有两个网络请求。

fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>

我想做的是...

  1. 启动时显示加载屏幕。这两个请求应该独立工作。
  2. 随着每个请求的完成,显示的结果也会更新。
  3. 当所有请求终止时隐藏加载屏幕。

我有处理加载页面的函数:

fun showLoadingScreen()
fun hideLoadingScreen()

并操纵 View :

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()

关于android - RxJava 分别和一起订阅多个 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55232453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com