【问题标题】:How to remove Firebase EventListener? [duplicate]如何删除 Firebase EventListener? [复制]
【发布时间】:2020-04-19 05:25:31
【问题描述】:

谁能向我解释如何在 Android 实时数据库中删除 firebase Eventlistener/childEventlistener 以及如何检测监听器是否成功删除?我使用下面的代码,但不确定这是否可以

class dummy AppCompatActivity() {
 lateinit var dbRaceRef: DatabaseReference
    lateinit var mListener: ValueEventListener
oncreate{

mListener = dbRaceRef.addValueEventListener(object : ValueEventListener {

            override fun onCancelled(p0: DatabaseError) {
            }

            override fun onDataChange(p0: DataSnapshot) {
                // do something
                }
            }
        })
}

ondestroy{
dbRaceRef.removeEventListener(mListener)
}
}

如果我不移除我的听众会发生什么。什么时候会自动销毁?我们能否以某种方式检查我的数据库中的活动侦听器是什么?

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    Firebase 实时数据库侦听器不会自动移除。它们仅在您明确删除它们或应用程序被终止时才会停止。没有 API 可以获取活动侦听器的列表,因此您必须自己跟踪。

    您通常应该在onStart 中连接您的听众,在这种情况下,您应该在活动的onStop 中删除它们。

    【讨论】:

    • 感谢您的澄清,我提到的代码对于删除监听器是否正确?(我个人认为删除监听器需要做很多工作,这意味着初始化 ref 和监听器,然后保留在内存中,销毁时删除)。以及如何检查监听器是否成功移除。
    • 无论如何要验证监听器是否被移除?
    • 当然。在数据库中进行更改,看看应用程序是否仍然更新。如果是这样,则未删除触发器。如果不再更新,则删除触发器。
    【解决方案2】:

    如果你只想使用一次获取值,你可以使用如下。

    private val databaseReference = FirebaseDatabase.getInstance().getReference("___")
    
    databaseReference.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {
            databaseReference.removeEventListener(this)
        }
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            databaseReference.removeEventListener(this)
        }
    })
    

    或者你可以使用 addListenerForSingleValueEvent

    但是如果你没有删除监听器并且你根据监听器改变值你可以无限循环。你需要小心。

    【讨论】:

    • 不,我只想使用 valueeventlistener,我只想在活动破坏时将其删除。你能告诉我如何移除我的监听器吗?
    【解决方案3】:

    如果您需要接收一次数据,则需要使用 addListenerForSingleValueEvent(...) 而不是 addValueEventListener(...)。那么 onDataChange() 只会返回一次

    【讨论】:

    • 不,我想在活动进行时从数据库中侦听更改,但我的 firebase 建议在使用后删除此值 eventlistener。我不知道该怎么做
    猜你喜欢
    • 2018-01-10
    • 2022-11-11
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多