Firebase值即使在我删除它们之后也一直在重新生成



我已经为这个问题挣扎了一个多星期了,如果你知道解决办法,请帮助我。

输入图片描述

我试图从Realtime Firebase中的子节点删除数据,但即使我删除令牌数据,它也会重新生成。

这是我的代码:

当用户登录时,自动生成FCM令牌(onCreate)。

当我试图注销他的帐户时,我希望从令牌列表中删除令牌,但即使我注销

,它仍在重新生成。这是登录后重定向到的User片段:

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.")
}

当使用Query#addValueEventListener()方法时,这意味着您正在尝试侦听实时更新。也就是说,每一个变化,发生在数据库和对应于您的查询,总是触发onDataChange()方法。因为当您注销时,您从正在侦听的查询中删除了一个值,您的令牌将再次写入,因此会出现这种行为。这是一次又一次。

要解决这个问题,只需将上面的方法调用更改为Query#addListenerForSingleValueEvent()。这意味着它只侦听一次更改。

我终于弄清楚我做错了什么,我只需要把我的代码(myRef)移出FirebaseMessaging。

相关内容

最新更新