如何解决添加暂停词后,Android Observable 查询不起作用
我正在尝试从 LiveData
迁移到 Kotlin Flow
。现在我正在从事一个在 Room
中提供离线支持的项目。
我正在浏览文档,并设法使用 Flow
在协程中编写了一个可观察的查询。 (见:here)
我现在面临的问题是,每当我在 DAO
类中添加 suspend 关键字并尝试运行该项目时,它都会失败并显示以下错误:
error: Not sure how to convert a Cursor to this method's return type (kotlinx.coroutines.flow.Flow<MyModel>).
有问题的代码:
@Transaction
@Query("SELECT * FROM table WHERE status = :status LIMIT 1")
suspend fun getWithSpecificStatus(status: String): Flow<MyModel?>
val modelLiveData: LiveData<MyModel?> = liveData(dispatchers.IO) {
val result = databaseService.getWithSpecificStatus(Enum.IN_PROGRESS.status).first()
result?.let {
emit(it)
}
}
我试图让事情变得简单。为什么我的代码失败了?
解决方法
您可以直接将 modelLiveData 的值初始化为:
val modelLiveData=databaseService.
getWithSpecificStatus(Enum.IN_PROGRESS.status).first()
.asLiveData()
您已使用 Flow,因此使用 asLiveData()
将其转换为 LiveData
另外建议,您不应该使用 suspend 关键字,因为当您返回 Flow 时,Room 会自动异步执行此操作。您只需要消耗 Flow。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。