我正在尝试更新聊天室数据库中某个项目的列,但该项目没有更新。
我的实体:
@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列:数量,名称和价格。这里我编写了一个函数来更新数据库中商品的quantity列:
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)
}
发布于 2019-12-23 11:11:21
我认为有两种方法。
1.在saveEditedItem(...)
fun中添加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)
}
https://stackoverflow.com/questions/59453124
复制