Room求和查询后TextView显示CoroutineLiveData对象哈希值问题求助
问题原因
你看到的androidx.lifecycle.CoroutineLiveData@76f6edd是LiveData对象本身的内存地址,不是查询逻辑错误:
- 你在ViewModel中已经把Room返回的Flow
转换成了LiveData类型的 totalSum,LiveData是数据持有容器,不能直接取toString()作为展示内容,需要通过观察者模式拿到容器内实际存储的求和数值。
修复方案
删除Fragment中totalSumTextView.apply块内的原有赋值逻辑,和你观察收据列表的逻辑一致,对求和LiveData添加观察者,数据变化时自动更新TextView:
// 放在onViewCreated方法内,和viewModel.receipts.observe逻辑同级 viewModel.totalSum.observe(viewLifecycleOwner) { sum -> // sum即为查询得到的求和值,空值(表内无数据时)默认显示0,保留2位小数适配金额展示 binding.totalSumTextView.text = String.format("总计:%.2f元", sum ?: 0f) }
补充说明
- 原有Dao层的查询语句、ViewModel层的Flow转LiveData逻辑都无需修改,Room会自动监听表数据变化,新增、删除收据时求和结果会自动更新到TextView
- 如果需要自定义空数据时的展示文案,可以调整空值处理逻辑,比如
sum ?: "暂无数据",注意对应类型匹配。
内容的提问来源于stack exchange,提问作者dkiwikid
相关产品推荐
相关产品推荐

