首页 > 解决方案 > .equals 函数在用于比较 2 个 livedata 对象时返回 false

问题描述

我有 2 个可变的实时数据对象

 val networkResponse = MutableLiveData<String>()
 val initialResponse = MutableLiveData<String>()

在我的初始函数中,我从完全相同的变量中给它们相同的值:

fun initialResponser() = viewModelScope.launch {
        val valueVariable = try {
            db.collection("room1").get().await().size().toString()
        } catch(e: Exception) {
            Log.d("TAG", "Error getting documents: ", e)
            return@launch
        }
        initialResponse.value=(valueVariable)
        networkResponse.value =(valueVariable)
    }

在第二个中,我执行完全相同的操作,没有从数据库或任何其他方面进行任何更改:

   fun check() = viewModelScope.launch {
        val valueVariable = try {
            db.collection("room1").get().await().size().toString()
        } catch(e: Exception) {
            Log.d("TAG", "Error getting documents: ", e)
            return@launch
        }
        networkResponse.value = (valueVariable)
        if (initialResponse.toString().equals(valueVariable)){
            Log.d(TAG,"Equals")
        }else{
            Log.d(TAG,"Not Equal")
            Log.d(TAG, initialResponse.toString().equals(valueVariable).toString())
            Log.d(TAG,"Initial Value: ${initialResponse.value}")
            Log.d(TAG,"New Value: ${networkResponse.value}")
        }
    }

日志中的结果check()如下:

D/TAG: Not Equal
D/TAG: false
D/TAG: 10
D/TAG: 10

当两个值相同时,我哪里出错了?

标签: kotlin

解决方案


LiveData 对象中包含的值可以使用 访问liveData.value,因此如果要比较它们的值,则必须编写

initialResponse.value.equals(valueVariable.value)

在您的代码中,当您编写initialResponse.toString此代码时,它基本上返回类似于androidx.lifecycle.MutableLiveData@aaa84ba而不是您似乎期望的值 10


推荐阅读