首页 > 解决方案 > 再次登录会删除 Firebase 实时数据库中的数据库

问题描述

firebase 中的数据库结构

在我在 firebase 中使用 google 登录并存储数据后,它会保存到相应的电子邮件中,但是当我注销并再次登录时,之前添加的数据会被删除。我尝试使用updatechildren,但数据仍然被删除并再次签名。

Databasemodel.kt

val u_id = bdatTitleref.push().key
data class Databasemodel(val uid:String, val name:String, val dob:String,var rem:Int) {

constructor():this("",",","",0)

fun toMap():Map<String,Any>{
    return mapOf(
        "uid" to uid,
        "name" to name,
        "dob" to dob,
        "rem" to rem
    )
  }
}

Mainactivity.kt

    val ref = FirebaseDatabase.getInstance()
    val rootref = ref.getReference("User")
    val userref = rootref.child(uid.toString())
    val bdayTitleref = userref.child("Birthday Persons")

    val model = Databasemodel(u_id!!, et_name.text.toString().trim(), tv_show_date.text.toString(), 0)
    val postModel=model.toMap()

     bdayTitleref.child(u_id).updateChildren(postModel)

在这里,我想添加不同的孩子,Birthday Persons所以请帮助我

标签: androidfirebasekotlinfirebase-realtime-database

解决方案


您的代码中的问题是使用了不正确的引用。当您尝试postModel使用以下代码行更新数据库中的对象时:

bdayTitleref.child(u_id).updateChildren(postModel)

您正在传递给.child(u_id)用户 ( nUmH ... TJk2) 的 uid,这是不正确的,因为在您的数据库中,孩子是推送的 id,而不是来自身份验证过程的用户的 uid。

请注意,当您创建Databasemodel类的新实例并将其转换为Map时,当您尝试将其写入Map数据库时​​,您会告诉 Firebase 该位置下的所有内容都应该被新数据覆盖。因此,在 的情况下postModel,它将旧值替换为新值。

如果要更新节点中存在的子Birthday Persons节点,则应考虑将其替换u_id-LsjBQxNuNMZ_VBj4Hyp

bdayTitleref.child("-LsjBQxNuNMZ_VBj4Hyp").updateChildren(postModel)

推荐阅读