Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RxJava分别和一起订阅多个观测值_Android_Kotlin_Rx Java - Fatal编程技术网

Android RxJava分别和一起订阅多个观测值

Android RxJava分别和一起订阅多个观测值,android,kotlin,rx-java,Android,Kotlin,Rx Java,我有两个网络请求 fun getPostDetail(postId: Int): Single<Post> fun getComments(postId: Int): Single<List<Post>> 并操纵视图: fun showPostDetails(post) fun showComments(comments) 我尝试过这种方式-订阅每个,也订阅合并的: postDetail = getPostDetail(postId) getComment

我有两个网络请求

fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>
并操纵视图:

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


为什么不使用合并并删除每个独立的订阅?
Single.merge(postDetail, getComments)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSubscribe {
        showLoadingScreen()
    }
    .doOnTerminate {
        hideLoadingScreen()
    }
    .subscribe()