My DataBase have two datas,i have two livedata to observe these two datas,when i update a piece of data,livedata1 have changed,but the question is coming ,the livedata2 have changed also. these is my code,whats wrong with this。
val userDB = UserDB.getInstance(this)
var userDao = userDB?.getUserDao()
val live0: LiveData<List<UserBean>>? = userDao?.getUser(0)
val live1: LiveData<List<UserBean>>? = userDao?.getUser(1)
val userBean1 = UserBean("jack", 10, 1)
val userBean2 = UserBean("david", 20, 0)
CoroutineScope(Dispatchers.IO).launch {
(0..5).forEach {
delay(1000)
userDao?.updateUserAge(it, "jack")
}
}
live0?.observe(this, {
it.forEach { index ->
Log.e("live0 ------->",
"id = ${index.id} ,name = ${index.userName} ,age = ${index.age} ,gender = ${index.gender}")
}
})
live1?.observe(this, {
it.forEach { index ->
Log.e("live1 ------->",
"id = ${index.id} ,name = ${index.userName} ,age = ${index.age} ,gender = ${index.gender}")
}
})
@Dao
interface UserDao {
@Insert
fun insertUsers(vararg users: UserBean)
@Query("UPDATE UserBean SET age =:age WHERE name =:name")
suspend fun updateUserAge(age: Int, name: String)
@Query("SELECT * FROM UserBean where gender =:gender ORDER BY ID DESC")
fun getUser(gender: Int): LiveData<List<UserBean>>
}
its my logcat enter image description here
Live data will send you an update when you make any changes in the table so this is working correctly you have to build logic around this.