【问题标题】:Not sure how to convert a Cursor to this method's return type after Kotlin update to 1.6.0在 Kotlin 更新到 1.6.0 后,不确定如何将 Cursor 转换为此方法的返回类型
【发布时间】:2021-12-30 02:19:55
【问题描述】:

我在我的项目中使用 Android Room 库来操作我的 SQLite 数据库中的数据,并且在以前的 Kotlin 版本 (1.5.31) 中一切正常。这是我的 DAO 示例:

@Dao
interface ServersDao {

    @Query("SELECT * FROM servers ORDER BY connectedDevices, ping ASC LIMIT 1")
    suspend fun getLeastLoadedServer(): Server

    @Query("SELECT * FROM servers ORDER BY ping, connectedDevices ASC LIMIT 1")
    suspend fun getNearestServer(): Server
}

将 Kotlin 更新到 1.6.0 版后,我的代码无法再编译,我收到此错误:

错误:不确定如何将 Cursor 转换为此方法的返回类型 (java.lang.Object)。 公共抽象 java.lang.Object getLeastLoadedServer(@org.jetbrains.annotations.NotNull()

经过一番搜索,我得知这是因为挂起函数,所以我从我的 DAO 中删除了 suspend 关键字,然后我开始收到明显的错误:

java.lang.IllegalStateException:无法访问主数据库 线程,因为它可能会长时间锁定 UI。

即使我是从 IO 协程调用这些函数。

我还阅读了 Kotlin 1.6.0 的更改日志,但没有多大帮助。

感谢任何帮助,谢谢。

【问题讨论】:

    标签: android kotlin android-room kotlin-coroutines


    【解决方案1】:

    使用 Android Room 2.4.0 将解决此问题。

    【讨论】:

    • 这救了我的命。非常感谢
    猜你喜欢
    • 2019-04-23
    • 2019-12-12
    • 2018-03-08
    • 1970-01-01
    • 2019-08-11
    • 2020-12-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多