अपने दाओ में अगली विधि जोड़ने का प्रयास करें:
@Query("UPDATE sum SET value = value + :addValue WHERE id =:id")
suspend fun updateSum(id: Int, addValue: Long)
फिर आप इसे अपने व्यूमोडेल/गतिविधि से कॉल कर सकते हैं
अपडेट करें
अद्यतन/सम्मिलित करने के लिए एकल विधि के लिए इन विधियों को dao में रखें:
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertSum(model: Sum)
@Query("UPDATE sum SET value = value + :value WHERE id = :id")
suspend fun updateSum(id: Int, value: Long)
@Query("SELECT * FROM sum WHERE id = :id")
suspend fun getSumById(id: Int): Sum?
@Transaction
suspend fun updateOrInsertSum(sum: Sum) { // <-- this method updates value or insert new item, if id is not found
getSumById(sum.id)?.let { updateSum(sum.id, sum.value) } ?: insertSum(sum)
}
बेशक आपको विधि जोड़नी चाहिए updateOrInsertSum
अपने भंडार और व्यूमॉडल में भी फिर यदि आप पहली बार id ='1' के लिए कॉल करते हैं तो मान डाला जाएगा:
viewmodel.updateOrInsertSum(Sum(1 ,10000)) // <-- id = 1, value = 10000
अगली कॉल पर आइटम को उसी विधि से अपडेट किया जाएगा:
viewmodel.updateOrInsertSum(Sum(1 ,20000)) // <-- id = 1, value = 10000+2000