【问题标题】:am i understanding ?.let wrong? (PrimaryKey error when either updating or inserting into room db)我理解吗?错了吗? (更新或插入房间数据库时的主键错误)
【发布时间】:2020-12-17 12:35:13
【问题描述】:

下面这个函数

进入 dictWord 如果它存在,它会在 db 中将 amount 属性增加一次更新并从 uiscope 中返回 - 从函数中返回 当 getDictWord 返回 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)
        }

【问题讨论】:

    标签: android database kotlin key let


    【解决方案1】:

    关于您最初关于?.let 语法的问题...

    此语法适用于可为空的值(在您的情况下返回 getDictWord(dictWord). 如果该值不为空,您将被传递到附加的块中,并且该值将作为it 传递到块中,并保证闭包的其余部分不为空。 如果值为 null,它将完全跳过该闭包。

    至于您收到的间歇性错误,根据您提供的信息,我认为您的解决方案将与此处给出的答案有关:UNIQUE constraint failed

    如果您能够提供更多相关日志和信息,我很乐意编辑和改进此答案以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 2020-08-16
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多