【问题标题】:Firebase Android how to save data without updating all the childrenFirebase Android如何在不更新所有孩子的情况下保存数据
【发布时间】:2021-03-20 14:37:01
【问题描述】:

我正在创建一个计步器应用,并尝试保存每日步数。我遇到的问题是,当我保存某一天的步骤时,它会用当天的步骤更新数据库中的所有日期。

步骤.kt

val sdf = SimpleDateFormat("dd-MM-yyyy")
    var currentDate = sdf.format(Date())

override fun onSensorChanged(event: SensorEvent?) {

        //check if date has changed
        isDateChanged()
}

private fun isDateChanged() {
        val sdf = SimpleDateFormat("dd-MM-yyyy")
        val dateComparison = sdf.format(Date())

        val user = auth.currentUser
        val userreference = databaseReference?.child(user?.uid!!)

        userreference?.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                if(currentDate == dateComparison){
                    return
                }else{
                    currentDate = dateComparison;
                    userreference.child("step_data").child("$currentDate").setValue(currentStepsInt) //save steps to firebase

在上面代码的 sn-p 中发生的事情是代码正在检查日期是否已更改。如果已更改,则将当前步骤(currentStepsInt)保存到数据库中。

在下图中,我遇到了这个问题。因此,例如,如果在 2021 年 3 月 21 日结束时计数为 120,它将保存为 120。然后如果在 2021 年 3 月 22 日结束时计数为 190,它将更新所有firebase 中“steps_data”下的条目为 190。我如何使它只更新相应日期的值?

上图是数据在 Firebase 数据库中的样子。

如果有人能帮助解决这个问题,我将不胜感激。

编辑:当传感器检测到变化时调用 isDateChanged()。

编辑 2:我怀疑问题出在代码的“child("$currentDate").setValue(currentStepsInt)”部分,因此 Firebase 会覆盖 $currentDate 的每个条目。

我该如何解决这个问题?

【问题讨论】:

  • 代码对我来说看起来不错。将代码贴在您调用isDateChanged() 函数的位置。
  • 我已更新帖子以显示调用 isDateChanged() 的位置

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

你试过吗? userreference.child("step_data/$currentDate").setValue(currentStepsInt)

【讨论】:

  • 是的,我试过了,结果还是一样
  • 对不起,我很久没有使用实时数据库了,对于 Firestore,你会这样做。如果尝试我更新的答案不起作用,我建议阅读此firebase.google.com/docs/database/android/…
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多