2017-07-24 164 views
0

我有一个听众对我的火力地堡数据库的根集 -removeEventListener不工作的火力地堡数据库

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); 

然后为我打开一个新的活动,我想这停止监听,所以我用 -

rootDB.removeEventListener(groupListener); 

它似乎一直在倾听,任何人都可以告诉我我做错了什么吗?

我知道我可以使用单个事件侦听器,但我希望它在该活动中保持监视,而不是在其他活动中监视。

谢谢!

+0

你在哪里添加removeEventListener?您应该最好在第一个活动的onDestroy中执行它 –

+0

它在调用新活动的方法中。我希望它在加载新的Activity时停止,然后onDestroy不会被调用。所以我做了什么,我把它移到了onDestroy上,但是当我调用第二个时,我完成了第一个活动,而它仍然使用ValueEventListener ... – AndyCr15

回答

1

三点建议:

您可添加的侦听不止一次。

如果听众已经被多次添加到数据的位置,它是 多次调用每个事件,你必须分离它同样 次数彻底清除它。 (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()); 

作为一种变通方法,您可以设置一个布尔值,并改变它的值,当你想停止/启动监听:

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

希望其中一个帮助..