You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Firebase Realtime Database存储Int类型按钮点击计数

问题根因说明

你当前的问题不是Firebase Realtime Database不支持Int类型存储,而是现有逻辑存在两处缺陷:

  1. 本地计数变量incrementNumber未和云端数据同步,每次打开应用都会重置为0,也无法同步其他设备的更新记录
  2. 你定义的Total数据类完全没有参与存取逻辑,不符合Firebase对象序列化存取规范

修复方案

1. 保留原有数据类(无需修改)

data class Total(val amount: Int? = null)

2. 修正Activity逻辑,实现云端数据同步

class SecondActivity : AppCompatActivity() {
    // 声明数据库引用
    private val database = FirebaseDatabase.getInstance().getReference("Total")
    // 本地存储当前计数值,和云端同步更新
    private var currentCount = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        // 监听云端数值变化,同步更新本地变量和UI
        database.child("value").addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                // 直接读取Int类型值,云端无数据时默认返回0
                currentCount = snapshot.getValue(Int::class.java) ?: 0
                increment_textview.text = "Button has been pressed $currentCount times!"
            }

            override fun onCancelled(error: DatabaseError) {
                // 自行添加读取错误的兜底处理
            }
        })

        button_increment.setOnClickListener {
            currentCount += 1
            // 直接存入Int类型值即可,Firebase会自动识别为number类型存储
            database.child("value").setValue(currentCount)
            // 如果要使用自定义数据类存储,使用下方代码即可,效果完全一致:
            // database.setValue(Total(currentCount))
        }
    }
}

验证注意事项

测试阶段可以临时把Firebase Realtime Database的读写权限放开,避免权限拦截导致写入失败:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 15:18:00