【发布时间】:2022-01-03 14:14:53
【问题描述】:
最初,我直接访问了一个 viewModel 函数,该函数为我正在运行的查询启动了一个 viewModel 范围协程。那有同样的错误。
然后,我将 viewModel 函数更改为挂起函数,并从片段中的协程调用它。那也没用。
所以,我使函数在协程中被调用,然后在 viewModel 范围内运行另一个协程。这给出了相同的结果。
我认为在片段创建过程中调用它可能负载太大。所以我尝试使用按钮 onclick 侦听器调用 viewModel 函数。又崩溃了。
我在数据库检查器中运行了相同的查询,它运行良好。所以,查询也不是问题。
在下面的屏幕截图中,我包含了有关该问题的所有必要细节。只关注突出显示的内容。从传递列表片段(左上选项卡)开始。从那里,调用右上角选项卡中的 viewModel 函数。从那里开始,它正下方的 DAO。然后是它下面的数据类。
viewModel 函数 -
fun resetAllAccess(){
viewModelScope.launch {
passwordDao.resetAccessForAll()
}
}
DAO 函数 -
@Query("UPDATE password_data SET access = 0 WHERE access = 1")
fun resetAccessForAll()
数据库的数据类-
@Entity(tableName = "password_data")
data class PasswordData(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
@ColumnInfo(name = "service_name") var serviceName: String,
@ColumnInfo(name = "service_password") var servicePassword: String,
@ColumnInfo(name = "is_an_application") var isAnApplication: Boolean = false,
@ColumnInfo(name = "use_finger_print") var useFingerPrint: Boolean = true,
@ColumnInfo(name = "access") var access: Boolean = false
)
从片段发出的调用 -
CoroutineScope(Dispatchers.IO).launch { viewModel.resetAllAccess() }
【问题讨论】:
-
尝试在
resetAccessForAll上添加suspend -
已经试过了。同样的错误。
-
请粘贴您的实际代码而不是您的代码图片。然后我们可以复制粘贴并显示固定版本。
-
是的。就这么做了。
标签: android sqlite kotlin android-room