gpt4 book ai didi

android - removeEventListener 不适用于 Firebase 数据库

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:03 25 4
gpt4 key购买 nike

我在我的 Firebase 数据库的根目录上设置了一个监听器 -

database = FirebaseDatabase.getInstance();
rootDB = database.getReference();

我有一个监听器设置如下 -

groupListener = (new ValueEventListener() {

@Override
public void onDataChange(DataSnapshot dataSnapshot) {

Log.i("ValueEventListener", "Count :" + dataSnapshot.getChildrenCount());
.... more code...

我如下附加监听器 -

rootDB.addValueEventListener(groupListener);

然后当我加载一个新 Activity 时,我希望它停止收听,所以我使用 -

rootDB.removeEventListener(groupListener);

好像一直在听,谁能告诉我我做错了什么?

我知道我可以使用单个事件监听器,但我希望它在此 Activity 中而不是在其他 Activity 中继续监视。

谢谢!

最佳答案

三个建议:

1.您可能不止一次添加监听器。

If a listener has been added multiple times to a data location, it is called multiple times for each event, and you must detach it the same number of times to remove it completely. (from here)

2.您要添加的监听器可能不是您要删除的同一。这里 CASE 1 将删除监听器,而 CASE 2 不会:

//CASE 1:
ValueEventListener listener = new ValueEventListener() {....}
databaseRef.addValueEventListener(listener);
databaseRef.removeEventListener(listener);

//CASE 2:
public ValueEventListener listener(){
return new ValueEventListener() {....}
}
databaseRef.addValueEventListener(listener());
databaseRef.removeEventListener(listener());

3. 作为解决方法,您可以设置一个 bool 值并在您想要停止/开始收听时更改它的值:

groupListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(isListening){
//...
}
}

希望其中之一能有所帮助..

关于android - removeEventListener 不适用于 Firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45291044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com