android - 无法更新房间数据库项目

标签 android kotlin android-room kotlin-coroutines kotlin-android-extensions

我正在尝试更新房间数据库中项目的列,但该项目没有更新。

我的实体:

    @Entity(tableName = "order_summary_table")
    data class SummaryItem(
    @ColumnInfo(name = "quantity")
    var quantity: Int = -1,

    @ColumnInfo(name = "item_name")
    val name: String,

    @ColumnInfo(name = "item_price")
    var price: Int
    ) {
    @PrimaryKey(autoGenerate = true)
    var itemId: Long = 0
    }

这是我的道:

    @Update
    fun update(summaryItem: SummaryItem)

    @Query("SELECT * FROM order_summary_table WHERE itemId = :key")
    suspend fun get(key: Long): SummaryItem?

ViewModel 中的函数。我正在使用 Kotlin Coroutines 进行数据库操作。我的数据库有 3 列:数量、名称和价格。这里我写了一个函数来更新数据库中某个项目的数量列:

   fun saveEditedItem(quantity: Int, summaryItemKey: Long) {
      coroutineScope.launch {
           val item = database.get(summaryItemKey)
           val editedItem = SummaryItem(quantity, item!!.name, item.price)
           updateSummaryItem(editedItem)
       }
   }

   private suspend fun updateSummaryItem(summaryItem: SummaryItem) {
      withContext(Dispatchers.IO) {
          database.update(summaryItem)
      }
   }

Fragment.kt 文件,我在这里设置了一个 OnClickListener 以在单击按钮时更新项目,但该项目没有得到更新。

   val quantityText = binding.editQuantityText
   binding.saveButton.setOnClickListener {
        val editTextValue = quantityText.text
        val quantity = Integer.parseInt(editTextValue.toString())
        viewModel.saveEditedItem(quantity, arguments.summaryItemKey)
   }

最佳答案

我认为有两种方法。

1.在saveEditedItem(...)中添加itemId PrimaryKey

coroutineScope.launch {
    val item = database.get(summaryItemKey)
    val editedItem = SummaryItem(quantity, item!!.name, item.price)
    editedItem.itemId = item.itemId
    updateSummaryItem(editedItem)
}

2.更新项目本身。

coroutineScope.launch {
        val item = database.get(summaryItemKey)
        item.quantity = //newQuantity
        item.name = // newName
        item.price = // newPrice
        updateSummaryItem(item)
    }

关于android - 无法更新房间数据库项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59453124/

相关文章:

Android:访问已配对的连接

java - Android下载管理器保存到/system

android - 房间和 SQLiteDatabaseCorruptException

android - 在没有密码的情况下从 AndroidKeyStore 获取 AES key 是否不安全?

android - 房间持久性库事务

android - ROOM 无法弄清楚如何将此字段保存到数据库中

android - 网格布局(不是 GridView ): How to create Items With different Heights through xml

java - onActivityResult 在 API 级别 17 下未调用

ios - 从 Kotlin Native 继承 UIView

android - 找不到字段的 setter - 将 Kotlin 与 Room 数据库结合使用