android - 再次登录会删除 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
所以请帮助我
解决方案
您的代码中的问题是使用了不正确的引用。当您尝试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)
推荐阅读
- python - 任何人都有“[Errno 2] 没有这样的文件或目录”修复?
- android - 以编程方式生成可绘制对象时的 Android OOM
- reactjs - ReactJS:在特定的时间间隔内定期更新状态
- java - 在添加依赖文件后的springboot中我有/newart.jsp抛出我做错的地方
- node.js - 部署在 Heroku 上的 Node.js 应用程序无限加载?
- python - 我在 django 中遇到了这些错误,所有命令都可以工作,但是如果我想启动服务器,则会发生这些错误
- python - 如何通过匹配 Pandas 数据框中的日期变量来进行 5 年计算?
- regex - 似乎找不到正则表达式匹配的索引
- xcode - 防止 Catalina 在每个新的 Xcode 构建中请求应用程序权限(如麦克风或钥匙串访问)
- c++ - 使用基数 10 转换数字的程序中的控制流