【问题标题】:Store int using Firebase Realtime Database使用 Firebase 实时数据库存储 int
【发布时间】:2021-10-09 04:22:22
【问题描述】:

我已将我的应用程序连接到 Firebase 实时数据库并设置了数据类,但还没有找到将 int 保存到数据库的方法。我想存储用户按下某个按钮的次数。我已经看过一些 yt 教程,但由于找不到专门针对 Int 而不是 String 的教程,因此没有通过这一步。

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

活动:

class SecondActivity : AppCompatActivity() {

    private lateinit var Total: Total
    private lateinit var amount : Total
    var database : DatabaseReference = FirebaseDatabase.getInstance().getReference("Total")

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

var incrementNumber = 0
button_increment.setOnClickListener {

     database.child("value").setValue(incrementNumber);
     "Button has been pressed $incrementNumber times!".also {increment_textview.text = it }

        }
    }
}

【问题讨论】:

  • 是的,int 值可以存储在 Firebase 中。它们属于文档here 中提到的NSNumber,其工作方式与存储字符串值没有什么不同。如果您对此有任何问题,请编辑您的代码以显示您如何尝试将整数值存储到数据库中。
  • 您好,我在编辑代码时遇到问题,因为我不知道如何将整数值存储到数据库中。在button_increment.setOnClickListener 中,我试图找出一种方法来增加数据库存储的按钮按下次数。目前incrementNumber++ 用于本地计算按钮按下的次数。
  • 尝试增加一个值与尝试读取一个值有很大不同。我会根据firebase.google.com/docs/database/ios/…写一个答案

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

到数据库中的atomically increment a value,可以这样做:

Database.database().reference().setValue(["counter": ServerValue.increment(1)]);

如果该值已存在,则将其加 1。如果该值尚不存在,则将其设置为 1。

【讨论】:

  • 感谢您的回复,对于对递增和读取值的误解,我深表歉意。用这行代码替换我的Increment++ 是否可以在没有任何其他步骤的情况下工作?我担心我可能没有正确设置数据类或在活动中正确引用它,因为到目前为止,提供的代码行给我一个错误,Database.database().reference().setValue(["counter": ServerValue.increment(1)]); 中的第一个“数据库”是未解决的参考。我尝试将其替换为我的数据类的名称,但无济于事。
  • 在你的情况下,你首先需要初始化database,然后你可以做database().reference().setValue...。
  • private lateinit var database : FirebaseDatabase 没有初始化数据库吗?我也尝试过使用database = FirebaseDatabase.getInstance().getReference("Total")“Total”作为数据类,但都没有成功
【解决方案2】:

试试下面。基本上我们正在获取 Total 节点并更新它的值。

第 1 步:

var database : FirebaseDatabase = FirebaseDatabase.getInstance().getReference("Total")

第 2 步:

database.child("value").setValue(incrementNumber);

【讨论】:

  • 感谢您的回复。好消息是可以在控制台中看到“总计”值。但是,该值与“增量”数据类是分开的。这是否意味着不需要数据类?我已经更新了问题中的代码以包含您的贡献。当我按下增量按钮时,应用程序运行正常并且不会崩溃。但是该值仍为 0。
  • 在步骤 2 中更改“金额”的“值”。
  • 我进行了更改,控制台确实显示“总计”正确持有“金额”,但不幸的是,尽管按下按钮的次数,“金额”的值仍然为 0
  • 将 incrementNumber 更改为 ++incrementNumber。这将在通过 setValue 将其发送到数据库之前将 incrementNumber 加 1。
  • 谢谢,这工作几乎完美!我在运行应用程序时打开了控制台,每次按下按钮时我都可以看到它实时更新。唯一的问题是,当我关闭并重新打开应用程序时,数字会重置为 0。我认为这可能与我设置代码的方式有关,因为当我返回上一个活动时,数字也会重置,我担心打开活动时,每当我在每个新的“onCreate”之后按下按钮时,它都可能会重置。
猜你喜欢
  • 2019-09-06
  • 2020-03-21
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2020-05-31
  • 2017-11-08
相关资源
最近更新 更多