我在我的项目中使用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 后,我的代码无法编译,并收到以下错误提示:
经过一些搜索,我发现原因是由于挂起函数。因此,我从 DAO 中删除了 suspend 关键字后,便出现了明显的错误:错误: 不知道如何将一个 Cursor 转换为此方法的返回类型 (java.lang.Object)。 public abstract java.lang.Object getLeastLoadedServer(@org.jetbrains.annotations.NotNull()
即使我是从 IO 协同程序中调用这些函数也不行。java.lang.IllegalStateException: 自主线程上不能访问数据库,因为它可能锁定 UI 较长时间。
我还查阅了 Kotlin 1.6.0 的变更日志,但没有什么帮助。
如果有任何帮助,感激不尽。谢谢。