Search code examples
androidandroid-roomandroid-livedata

After Android update the room, other livedata is update


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


Solution

  • 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.