Kotlin 房间数据库布尔值

Kotlin room database boolean

我正在尝试创建一个应用程序,用户可以在其中列出要实现的步骤目标列表,然后选择其中一个来激活并遵循。当我只使用目标 ID、名称和步骤时数据库可以工作,但现在我意识到我需要插入另一列来定义目标何时处于活动状态,所以我试图插入它,但我不知道我应该如何处理布尔值,尤其是在存储库和 viewModel 中。我将不胜感激任何帮助。提前致谢

这是我的代码

interface Dao {

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(goal: Goal)

@Update
suspend fun updateGoal(goal: Goal)

@Query("SELECT * FROM user_goal_table order by goalId")
fun getAll(): LiveData<List<Goal>>


@Query("SELECT * FROM user_goal_table WHERE goalId = :key")
suspend fun getGoal(key: Int): Goal

@Delete
suspend fun delete(goal: Goal)

@Query("SELECT * FROM user_goal_table WHERE goal_is_active = 1 order by goalId")
suspend fun makeGoalActive(key: Int): Goal




class Repository (private val dao : Dao){

val allGoals: LiveData<List<Goal>> = Dao.getAll()

suspend fun insert(goal: Goal){
    dao.insert(goal)
}

suspend fun update(goal: Goal){
    dao.update(goal)
}

suspend fun delete(goal: Goal){
    dao.delete(goal)
}

suspend fun active(goal: Goal, int: Int){
    dao.makeGoalActive(int)
}



class ViewModel (application: Application) : AndroidViewModel(application) {

val allGoals: LiveData<List<Goal>>
private val repository: Repository

init{
    val dao = GoalDatabase.getInstance(application).getGoalDao()
    repo = Repository(dao)
    allGoals = repository.allGoals

}


fun insert(goal: Goal) = viewModelScope.launch(Dispatchers.IO){
    repository.insert(goal)
}

fun update(goal: Goal) = viewModelScope.launch(Dispatchers.IO){
    repository.update(goal)
}

fun delete(goal: Goal) = viewModelScope.launch(Dispatchers.IO){
    repository.delete(goal)
}

只需将新的 属性 添加到 Goal class 之类的 isActive: Boolean,然后在 Room 中使用 @Update 注释(您已经实现了在你的 Dao 的 updateGoal(goal: Goal) 方法中)或 UPDATE 在 SQLite 中命令自己更新你想要更改其 isActive 状态的行。要使用 SQLite,请执行以下操作:

@Query("UPDATE user_goal_table SET isActive = 1 WHERE goalId = :goalId")
suspend fun makeGoalActive(goalId: Int)

对于布尔属性,在 SQLite 命令中对 true 使用 1,对 false 使用 0

在Repository中,这个方法就够了:

suspend fun active(goalId: Int) {
    dao.makeGoalActive(int)
}

在 ViewModel 中:

fun insert(goal: Goal) = viewModelScope.launch {
    repository.insert(goal)
}

顺便说一句,您不需要为 Room 方法确定 IO 调度程序,Room 使用自己的调度程序来 运行 查询。