【发布时间】:2020-05-09 20:24:36
【问题描述】:
这就是我试图用Flow 做的事情,我在onStart 中显示ProgressBar 并试图在onCompletion 中隐藏ProgressBar。
在 ViewModel 类中 appDatabase.eventDao().getAllEvents() 返回Flow<List<EntityEvents>
@ExperimentalCoroutinesApi
val allEvents: LiveData<Outcome<List<Event>>> = _fetchEvents.switchMap { _ ->
appDatabase.eventDao().getAllEvents()
.map { eventListMapper.map(it) }
.map { sortEventsBasedOnPreference(it) }
.flowOn(Dispatchers.IO)
.map { Outcome.success(it) }
.onStart { emitLoading(true) }
.onCompletion { emitLoading(false) }
.catch { emitFailure(it, R.string.err_something_wrong) }
.asLiveData(context = viewModelScope.coroutineContext)
}
一切正常,我无法弄清楚为什么任务完成后没有调用onCompletion?
【问题讨论】:
-
不需要叫终端操作员来完成流程吗?还是在物品用完时会自动终止? “流上的终端操作符要么是暂停功能,例如 collect、single、reduce、toList 等,要么是在给定范围内开始收集流的 launchIn 操作符。”
-
它会自动终止并将数据加载到 UI 中,但不应在
flow完成时调用onCompletion。我的目标是分别在onStart和onCompletion运算符中显示和隐藏ProgressBar。 -
我遇到了同样的问题,你是怎么解决的?
-
我遇到了同样的问题,但意识到发射部分从未完成,因此从未调用过 onCompletion。检查您的流程是否完成
-
@Hussain 你是如何解决进度条问题的?我在同一条船上
标签: android kotlin android-livedata coroutine flow