微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

添加暂停词后,Android Observable 查询不起作用

如何解决添加暂停词后,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 举报,一经查实,本站将立刻删除。