即使在我删除它们后,Firebase 值也会不断重新生成
Posted
技术标签:
【中文标题】即使在我删除它们后,Firebase 值也会不断重新生成【英文标题】:The Firebase value keeps regenerating even after i delete them 【发布时间】:2021-11-28 08:16:38 【问题描述】:我已经为这个问题苦苦挣扎了一个多星期,如果您知道解决方法,请帮助我。
enter image description here
我正在尝试从 Realtime Firebase 中的子节点中删除数据,但即使我删除了令牌数据,它也会继续重新生成。
这是我的代码:
当用户登录时,会自动生成 FCM 令牌 (onCreate)。
当我尝试将他从他的帐户中注销时,我希望将令牌从令牌列表中删除,但即使我注销它也会继续重新生成
这是登录后重定向到的用户片段:
val currentUser : String = firebaseAuth.currentUser?.uid.toString()
val databaseReference = FirebaseDatabase.getInstance("https://trial-38785-default-rtdb.firebaseio.com/")
.getReference("AppUsers").child("Doctor").child(currentUser)
FirebaseMessaging.getInstance().token.addOnCompleteListener
if (it.isComplete)
val firebaseToken = it.result.toString()
val myRef =
FirebaseDatabase.getInstance("https://trial-38785-default-rtdb.firebaseio.com/")
.getReference("AppUsers").child("Doctor").child(currentUser)
myRef.child("Token").orderByChild("token").equalTo(firebaseToken)
.addValueEventListener(object : ValueEventListener
override fun onDataChange(snapshot: DataSnapshot)
val token : Token = Token(firebaseToken)
if (snapshot.exists())
return
else
databaseReference.child("Token")
.child(currentdate.toString()).setValue(token)
override fun onCancelled(error: DatabaseError)
Toast.makeText(context, error.message, Toast.LENGTH_LONG).show()
)
.addOnFailureListener
Toast.makeText(context, it.message, Toast.LENGTH_LONG).show()
这是医生退出的另一个片段。
按下注销按钮这是我运行的代码
val delRef = FirebaseDatabase.getInstance().getReference("AppUsers")
.child("Doctor").child(currentId.toString())
.child("Token").child(key.toString()).removeValue()
delRef.addOnSuccessListener
println("Removed.")
.addOnFailureListener
println("Not Removed.")
【问题讨论】:
【参考方案1】:当使用Query#addValueEventListener() 方法时,这意味着您正在尝试侦听实时更新。话虽如此,数据库中发生的与您的查询相对应的每次更改都会触发您的 onDataChange() 方法。由于当您注销时,您从正在收听的查询中删除了一个值,因此您的令牌会再次被写入,因此会出现这种行为。这种情况一遍又一遍地发生。
要解决这个问题,只需将上述方法调用更改为Query#addListenerForSingleValueEvent()。这意味着它只侦听一次更改。
【讨论】:
如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记 (✔️) 来接受它。应将颜色更改为绿色。我真的很感激。谢谢!【参考方案2】:我终于弄清楚我做错了什么,我只需要将我的代码 (myRef) 移到 FirebaseMessaging 之外。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于即使在我删除它们后,Firebase 值也会不断重新生成的主要内容,如果未能解决你的问题,请参考以下文章
即使正确设置了所有权限,Cloudkit 也会不断给出创建权限错误