我正在用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之外显示该信息,但我不喜欢它吗?也许您知道该怎么办。
预先感谢您, 保罗
答案 0 :(得分:1)
您可以使用doOnSubcribe(),一旦观察到订阅,就会立即调用它