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 身份运行”错误。没有其他改变
如何从 API 显示图像并在单击图像后将用户发送到视频链接? Kotlin,改造