And*_*r15 4 android event-listener firebase firebase-realtime-database
我在Firebase数据库的根目录上设置了一个监听器 -
database = FirebaseDatabase.getInstance();
rootDB = database.getReference();
Run Code Online (Sandbox Code Playgroud)
我有一个听众设置如下 -
groupListener = (new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.i("ValueEventListener", "Count :" + dataSnapshot.getChildrenCount());
.... more code...
Run Code Online (Sandbox Code Playgroud)
我附上听众如下 -
rootDB.addValueEventListener(groupListener);
Run Code Online (Sandbox Code Playgroud)
然后当我加载一个新的活动时,我想让它停止听,所以我使用 -
rootDB.removeEventListener(groupListener);
Run Code Online (Sandbox Code Playgroud)
它似乎在继续倾听,谁能告诉我我做错了什么?
我知道我可以使用单个事件监听器,但我希望它在此活动中保持监控,但在其他活动中则不行.
谢谢!
小智 6
三点建议:
1.您可能不止一次添加监听器.
如果已将侦听器多次添加到数据位置,则会为每个事件多次调用该侦听器,并且必须将其分离相同的次数才能完全删除它.(从这里)
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());
Run Code Online (Sandbox Code Playgroud)
3.作为一种解决方法,您可以设置布尔值并在想要停止/开始侦听时更改其值:
groupListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(isListening){
//...
}
}
Run Code Online (Sandbox Code Playgroud)
希望他们中的一个有帮助..
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |