首页 > 解决方案 > 如何访问 Firebase 方法内部的变量?

问题描述

所以我的代码中有两个引用。一个获得本月赚取的总金额,另一个获得本月花费的总金额。

我收到这段代码的传入

val incomeSumReference = database.getReference("users").child(uid).child("Incomes").child(
    currentYear.toString()
).child(currentMonthInString.toString())
incomeSumReference.addValueEventListener(object : ValueEventListener {
    @SuppressLint("SetTextI18n")
    @RequiresApi(Build.VERSION_CODES.N)
    override fun onDataChange(snapshot: DataSnapshot) {
        var sum = 0.0

        for (dataSnapshot in snapshot.children) {
            var map = dataSnapshot.getValue() as Map<*, *>
            val sumOfIncomes = map.get("itemValue")
            var sumo = sumOfIncomes.toString()
            var sumAsDouble: Double? = sumo.toDouble()
            sum += sumAsDouble!!
            var stringSum = sum.toString()
            var incomeSumToFormated = formatNumberString(stringSum) // this is what I want to get

            profitTextView.text = "+$" + incomeSumToFormated.toString()

        }
    }

    override fun onCancelled(error: DatabaseError) {
    }
})

这是我花钱的参考代码块

val spentSumReference =  database.getReference("users").child(uid).child("Expenses").child(
    currentYear.toString()
).child(currentMonthInString.toString())
spentSumReference.addValueEventListener(object : ValueEventListener {
    @RequiresApi(Build.VERSION_CODES.N)
    override fun onDataChange(snapshot: DataSnapshot) {
        var sum = 0.0
        for (dataSnapshot in snapshot.children) {
            var map = dataSnapshot.getValue() as Map<String, Object>
            val sumOfIncomes = map.get("itemValue")
            var sumo = sumOfIncomes.toString()
            var sumAsDouble: Double? = sumo.toDouble()
            sum += sumAsDouble!!

            var stringSum = sum.toString()
            var spentSumToFormated = formatNumberString(stringSum) // this is what I want to get outside 

            spentTextView.text = "-$" + spentSumToFormated.toString()
        }
    }

    override fun onCancelled(error: DatabaseError) {
    }

})

我有一个名为 totalBalance 的文本视图,我想做这样的事情

var income = incomeSumToFormated.toDouble

var spent = spentSumToFormated.toDouble

var total = income-spent

totalBalance.text = total.toString

我试图在方法之外声明incomeSumFormated 和spendSumFormated 但它不起作用。

编辑

在这里,我使用我的应用程序的屏幕截图来展示我的意图。

https://imgur.com/3RiGqKW

我认为最简单的方法就是获取incomeSumFormated 和spendSumFormated 结果并将余额文本设置为它们的差异。就像我在那里写的:

var income = incomeSumToFormated.toDouble

var spent = spentSumToFormated.toDouble

var total = income-spent

totalBalance.text = total.toString

我还将发布我的 firebase 数据库的屏幕截图,向您展示它的外观。

https://imgur.com/kdB9JIb

https://imgur.com/Brccs9t

标签: androidfirebasekotlinfirebase-realtime-database

解决方案


推荐阅读