【发布时间】:2020-09-04 05:00:42
【问题描述】:
我对 kotlin observables 有疑问,我已经通过互联网和 stackoverflow 进行了搜索,但我认为我在概念上遗漏了一些东西。我有dashboardRepository,它有一个名为getCallsCountForWeek的方法,它基本上返回过去7天的可流动列表,现在我需要遍历所有可流动的,然后用用户当天的通话次数更新我的图表。这是我的代码
fun getCallsCountForWeek(calendar: Calendar) : List<Flowable<Float>> {
val result = ArrayList<Flowable<Float>>()
for(index in 0..6) {
calendar.add(Calendar.DAY_OF_MONTH, -index)
result.add(dashbordDao.getCallsCountForDay(customSharedPreferences.getUser()?.id!!, CustomDateTimeUtil.getStartOfDay(calendar), CustomDateTimeUtil.getEndOfDay(calendar)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()))
}
return result
}
Observable.fromArray(dashboardRepository
.getCallsCountForWeek(calendar). map {
items -> kotlin.run {
items.forEach {
it.subscribe({
Log.e("Result", " Count: " + it)
},{
Log.e("Error", "" + it)
})
}
}
}.doOnComplete {
//We will do this when it is completed
Log.e("Result", "Completed")
}.doFinally {
Log.e("Result", "Finally")
}.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe()
问题是 doFinally 和 doOnComplete 在 map 完成对所有 flowables 的迭代之前被调用。我尝试将 .zip 用于 flowables,但显然无法使其正常工作。
根据堆栈溢出的其他帖子,订阅成功时会调用 doOnComplete,但我希望在 .map 内完成所有操作后发生这种情况。
【问题讨论】:
标签: android kotlin observable rx-android