如何解决使用 Kotlin 协程和 Flow 从房间链请求
我想为不同的 Flow 类型请求两次,然后在单个实时数据中添加结果以进行观察。 但只能得到第一个结果。
ParentModel 是 Note 和 FolderWithNote 数据类的父级。
val allItems: mutablelivedata<List<ParentModel>> = mutablelivedata()
fun getAllItems() {
viewmodelScope.launch {
noteRepository.getFoldersWithNotes()
.collect {
allItems.postValue(it)
}
noteRepository.getAllNotes()
.map {
databaseNoteMapper.mapFromEntityList(it)
}
.collect {
allItems.postValue(it)
}
}
}
我在片段中观察到这样
viewmodel.allItems.observe(viewLifecycleOwner,{
adapter.setItems(it)
})
我想在我的 recyclerView 中显示所有 Notes 和 Folderwithnotes,我在我的 Recycler 适配器中处理它们的不同绑定。
解决方法
这是肯定的,因为第一个 Flow collect 会阻塞等待数据库返回的数据。需要打开两个子协程来完成Flow的collect,而不是全部放在一个子协程中。
编辑
使用异步进行并发。 await 获取 future 对象,合并并发结果并发送给 LiveData。
fun getAllItems() {
viewModelScope.launch {
val folds = viewModelScope.async {
noteRepository.getFoldersWithNotes()
}
val notes = viewModelScope.async {
noteRepository.getAllNotes()
.map {
databaseNoteMapper.mapFromEntityList(it)
}
}
allItems.postValue(folds.await() + notes.await())
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。