Android 房间 SUM 查询返回空值

Android Room SUM Query returning null

我正在尝试从我的 TransactionDatabase 中获取所有交易金额的总和,但它始终返回 null。 感谢您的帮助!!

这是我的片段

val transactionViewModelSum = ViewModelProvider(
            requireActivity(),
            TransactionViewModelFactory(requireActivity().application))
            .get(TransactionViewModel::class.java)

        transactionViewModelSum.getTransactionByDate().observe(viewLifecycleOwner, Observer {
            totalAmount = it.div(10)
        })

        if(totalAmount == null ) binding.cpbMainExpenses.progress = 15f else binding.cpbMainExpenses.progress = totalAmount!!.toFloat()

我的 DAO

 @Query("SELECT total(amount) FROM `Transaction`")
    fun getTransactionByDate(): LiveData<Double>

我的存储库

fun getTransactionByDate(): LiveData<Double> {
        return transactionDao.getTransactionByDate()
    }

我的视图模型


private val liveTransactionDate = repository.getTransactionByDate()
...
fun getTransactionByDate(): LiveData<Double> = liveTransactionDate

您的查询看起来没问题。我认为此 transactionViewModelSum.getTransactionByDate().observe() 代码的异步工作存在问题。 尝试将 if(totalAmount == null ) binding.cpbMainExpenses.progress = 15f else binding.cpbMainExpenses.progress = totalAmount!!.toFloat() 放入观察者 lambda 中,如下所示:

transactionViewModelSum.getTransactionByDate().observe(viewLifecycleOwner, Observer {
            totalAmount = it.div(10)
            if(totalAmount == null ) binding.cpbMainExpenses.progress = 15f else binding.cpbMainExpenses.progress = totalAmount!!.toFloat()
        })

我认为您尝试在 getTransactionByDate 发出值之前读取 totalAmount 的值。如果我说的不对,请在评论中告诉我。