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