我理解吗?.错了吗? (更新或插入房间数据库时出现主键错误)
am i understanding ?.let wrong? (PrimaryKey error when either updating or inserting into room db)
下面这个函数
in goes the dictWord
如果它存在,它会在数据库中增加 属性 的数量,并在 uiscope 之外增加 returns - 在函数之外
当 getDictWord return 为 null 时,它会创建一个 newDictWord 并将其添加到数据库中并离开协程范围,然后离开函数
没有?
因为我得到“android.database.sqlite.SQLiteConstraintException:唯一约束失败:DictWord.name(代码 1555 SQLITE_CONSTRAINT_PRIMARYKEY)”
不时从那个
fun addOrIncreaseDictWordAmount(dictWord: String) {
uiScope.launch {
userDatabaseDao.getDictWord(dictWord)?.let {
it.amount += 1
userDatabaseDao.updateDictWord(it)
return@launch
}
// adds the strain to the AddNew dropDown list
val newDictWord = DictWord(name = dictWord)
userDatabaseDao.insertDictWord(newDictWord)
}
关于您最初关于 ?.let
语法的问题...
此语法适用于可为 null 的值(在您的情况下为 getDictWord(dictWord) 的 return。
如果该值不为空,您将被传递到附加的块中,并且该值将作为 it
传递到块中,并保证 not-null 用于闭包的其余部分。
如果该值为 null,它将完全跳过该闭包。
关于您收到的间歇性错误,根据您提供的信息,我认为您的解决方案与此处给出的答案有关:
如果您能够提供更多涉及的日志和信息,我很乐意编辑和改进此答案以解决您的问题。
下面这个函数
in goes the dictWord 如果它存在,它会在数据库中增加 属性 的数量,并在 uiscope 之外增加 returns - 在函数之外 当 getDictWord return 为 null 时,它会创建一个 newDictWord 并将其添加到数据库中并离开协程范围,然后离开函数 没有?
因为我得到“android.database.sqlite.SQLiteConstraintException:唯一约束失败:DictWord.name(代码 1555 SQLITE_CONSTRAINT_PRIMARYKEY)” 不时从那个
fun addOrIncreaseDictWordAmount(dictWord: String) {
uiScope.launch {
userDatabaseDao.getDictWord(dictWord)?.let {
it.amount += 1
userDatabaseDao.updateDictWord(it)
return@launch
}
// adds the strain to the AddNew dropDown list
val newDictWord = DictWord(name = dictWord)
userDatabaseDao.insertDictWord(newDictWord)
}
关于您最初关于 ?.let
语法的问题...
此语法适用于可为 null 的值(在您的情况下为 getDictWord(dictWord) 的 return。
如果该值不为空,您将被传递到附加的块中,并且该值将作为 it
传递到块中,并保证 not-null 用于闭包的其余部分。
如果该值为 null,它将完全跳过该闭包。
关于您收到的间歇性错误,根据您提供的信息,我认为您的解决方案与此处给出的答案有关:
如果您能够提供更多涉及的日志和信息,我很乐意编辑和改进此答案以解决您的问题。