hid*_*s02 5 android kotlin android-room kotlin-coroutines
我在项目中使用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
}
Run Code Online (Sandbox Code Playgroud)
将 Kotlin 更新到版本 1.6.0 后,我的代码无法再编译,并且收到此错误:
错误:不确定如何将 Cursor 转换为此方法的返回类型 (java.lang.Object)。公共抽象 java.lang.Object getLeastLoadedServer(@org.jetbrains.annotations.NotNull()
经过一番搜索,我发现这是因为挂起函数,所以我从我的 DAO 中删除了挂起关键字,然后我开始收到明显的错误:
java.lang.IllegalStateException:无法在主线程上访问数据库,因为它可能会长时间锁定 UI。
即使我是从 IO 协程调用这些函数。
我还阅读了 Kotlin 1.6.0 的变更日志,但没有多大帮助。
如有任何帮助,我们将不胜感激,谢谢。
归档时间: |
|
查看次数: |
1566 次 |
最近记录: |