在RxJava中执行每个Concat元素之前如何做?

问题描述 投票:0回答:1

我正在用Kotlin编写api同步模块。我想向人们展示当前正在下载什么应用,但我对此有疑问。让我向您展示我在做什么的示例代码:

private val downloadProcessNameList = listOf(
    "Controller 1",
    "Controller 2"
)

private val downloadList = listOf(
    controller1.allFromApi(),
    controller2.allFromApi()
)

init {
    liveDownloadPercent.postValue(0)
    liveSavePercent.postValue(0)

    mDisposable.add(
        Maybe.concat(downloadList)
            .doOnNext { liveDownloadStatus.postValue(downloadProcessNameList[i]) }
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())
            .subscribe(
                {
                    Log.i(LOG_HEADER, it.size.toString())

                    i++
                },
                {
                    Log.e(LOG_HEADER, it.message)
                },
                {
                    Log.i(LOG_HEADER, "onComplete")
                }
            )
    )
}

问题在于这条线

.doOnNext { liveDownloadStatus.postValue(downloadProcessNameList[i]) }

它在cotroller第一次响应后立即执行,用户一开始就看不到应用程序在做什么。我到处搜索,找不到正确的答案。开始Concat之前如何显示downloadProcessNameList [i]中的信息?当然可以在Maybe.concat之外显示该信息,但我不喜欢它吗?也许您知道该怎么办。

谢谢你,保罗

android kotlin system.reactive
1个回答
0
投票

您可以使用doOnSubcribe(),一旦观察到订阅,就会立即调用它

© www.soinside.com 2019 - 2024. All rights reserved.