kotlin - .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
当两个值相同时,我哪里出错了?
解决方案
LiveData 对象中包含的值可以使用 访问liveData.value
,因此如果要比较它们的值,则必须编写
initialResponse.value.equals(valueVariable.value)
在您的代码中,当您编写initialResponse.toString
此代码时,它基本上返回类似于androidx.lifecycle.MutableLiveData@aaa84ba
而不是您似乎期望的值 10
推荐阅读
- php - 我的查询有什么问题,即使在检查后仍然插入?
- c# - 试图进行计算而不是计算平均值和曲线
- javascript - 如何将 _.debounce 应用于我的不和谐机器人?
- c# - 不要在模拟器中连接到 web api,而是在 xamarin 形式的真实手机中工作
- create-react-app - “npx create-react-app ...”审计带有 3 个高严重性问题。我怎样才能解决这个问题?
- scala - 如何使用 Scala 的 Slick 库执行 JDBC 身份验证?
- python - 具有不同输入的 Python 单元测试
- ruby-on-rails - 从字符串表示中显示缩写时区
- pine-script - 本地和全局范围之间的 Pinescript 问题
- php - 为什么在此 Codeigniter 3 应用程序中通过电子邮件发送密码重置链接失败?