我正在尝试更新会议室数据库中某个项目的列,但是该项目没有更新。
我的实体:
@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协程进行数据库操作。我的数据库有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)
}
答案 0 :(得分:1)
我认为有两种方法。
1.in 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)
}