【发布时间】: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