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
的值。如果我说的不对,请在评论中告诉我。
我正在尝试从我的 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
的值。如果我说的不对,请在评论中告诉我。