【发布时间】: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