【问题标题】:Retrieve integer from Firebase child从 Firebase 子项中检索整数
【发布时间】:2025-12-21 22:00:06
【问题描述】:

我正在尝试在我的应用中实现交易计数器。我试图回忆写给孩子的最后一个整数,例如交易编号 10。我可以成功地将手动输入的值写入 firebase,但我无法检索初始值。

我正在使用以下

dealnumRef = FirebaseDatabase.getInstance().reference
val numberRef = dealnumRef.child("Total_deals").orderByChild("deal_number")


val dealnumEventListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        for (ds in dataSnapshot.children) {

            val deal_num =
                ds.child("deal_number_cars").getValue()
            d("current deal number",deal_num.toString())
            val new_deal_num = deal_num + 1

我遇到的问题是,目前deal_num 正在以Any? 的身份通过。如果我将String::class.java 插入getvalue(),它会将其作为字符串返回。但我需要将其保留为Integer 以计算new_deal_num,因为需要将new_deal_num 写入数据库并将deal_number 增加到11 作为示例。

如何将deal_num 提取为整数?

我已经检查了可用的答案,但那些表明要转换为字符串。这在我的示例中不起作用,因为我需要增加交易编号并因此将其保留为整数。

【问题讨论】:

    标签: firebase kotlin firebase-realtime-database


    【解决方案1】:

    您可以通过将其类传递给 getValue(..) 从 Firebase 获取正确的类型。

    所以:

    val deal_num = ds.child("deal_number_cars").getValue(Long.class)
    

    如果您在数据库中的deal_number_cars 中存储一个数字,这将获得该值作为long

    【讨论】:

    • 这似乎仍然没有帮助, getValue() 似乎没有将 Long.class 作为参数。指向显示错误 ibb.co/2cF6r2g 的图像的链接
    • 应该是getValue(Long::class.java)
    • 嗨@PeterHaddad,您的建议有所帮助,但似乎仍然没有提取价值。查看我从 Logcat ibb.co/7t75P8d 得到的错误
    • 发现问题。我不得不删除对 child("deal_number_cars") 的引用。这成功返回了值。
    【解决方案2】:

    对以上内容的完整更正如下:

    dealnumRef = FirebaseDatabase.getInstance().reference
    val numberRef = dealnumRef.child("Total_deals").orderByChild("deal_number_cars")
    
    
    val dealnumEventListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        for (ds in dataSnapshot.children) {
    
            val deal_num =
                ds.getValue(Long::class.java)!!
            d("current deal number",deal_num.toString())
            val new_deal_num = deal_num + 1
    

    您还必须确保您的数据模型类设置为 Long。我最初将它设置为 Int,这造成了一个小问题,但很容易解决。

    【讨论】: