kotlin 升级到 1.6.0 后如何在 Room Dao 中使用挂起修饰符?

Posted

技术标签:

【中文标题】kotlin 升级到 1.6.0 后如何在 Room Dao 中使用挂起修饰符?【英文标题】:How to use suspend modifier in Room Dao after kotlin upgrade to 1.6.0? 【发布时间】:2022-01-02 18:13:40 【问题描述】:

将 kotlin 升级到 1.6.0 会导致 Room Dao 挂起修改器中断构建项目并出现错误:“不确定如何处理查询方法的返回类型......”。

除了在存储库中运行 Dao 函数 withContext(Disapatchers.IO) 的解决方法之外,还有其他解决方案吗?

【问题讨论】:

对于我的插入和删除功能,我刚刚删除了 suspend 关键字。对于我的查询,我使用了Flow<MyQueryResult> 的返回类型。但是,这只是删除暂停感觉就像作弊:( 是的。我也把它删了。我找不到正确的方法。改变了什么。如何处理。 【参考方案1】:

我昨天在升级 Kotlin 1.6.0 时遇到了同样的问题。

我的工作项目开始失败,同样的错误消息。

在其他一些论坛中搜索后,有人提到将 roomVersion 更改为“2.4.0-beta02”。而且......令人惊讶的是它起作用了!至少它编译后没有任何问题。

试试吧,希望它也对你有用。

我的定义在一个变量中:

def roomVersion = "2.4.0-beta02"

因此,Room 的其余依赖项应利用此更改。

【讨论】:

从未考虑过使用 beta 库。是时候去做了。 我也没有。但是,出于某种原因,Room 2.3.0 与 Kotlin 1.6 发生了冲突。我预计 Room 2.4.0 很快就会推出。 别管它现在稳定了,我已经更新了我的答案【参考方案2】:

新的 Kotlin 编译器(又名 1.6.+)至少需要房间版本 2.4.0 才能支持该语言。所以将你的房间依赖升级到2.4.0

由于您使用的是房间版本,因此您还必须针对 android API 31

Room 2.4.0 changes

【讨论】:

但是为什么每次语言更新时我们都要经历这样的重大变化呢?这就是您不能自信地接受任何 AS 更新的原因。总是有破坏以前工作正常的东西的风险。 同意,我们总是害怕升级,我们想花时间开发,而不是如何克服那些破坏性的变化!

以上是关于kotlin 升级到 1.6.0 后如何在 Room Dao 中使用挂起修饰符?的主要内容,如果未能解决你的问题,请参考以下文章

从 SonarQube 6.5 升级到 6.6 后出现 elasticsearch“无法以 root 身份运行”错误。没有其他改变

Kotlin 1.6.0 新特性预览:语法和标准库

升级到 Kotlin 1.5.20 时出现谷歌地图问题

如何从 API 显示图像并在单击图像后将用户发送到视频链接? Kotlin,改造

Apache Spark 使用自制软件从 1.5.2 升级到 1.6.0,导致执行期间权限被拒绝错误

无法生成签名的apk,kotlin