2015-10-05 54 views
0
// Group node listener were all the user group messages arriving 
    public void listenToGroupNode() { 
     Log.i("FireBase", "listenToGroupNode"); 
     try { 
      final List<UserGroups> dataFromDataBase = new UserGroupsActions(dbHelper).getAllUserGroups(); 
      for (int i = 0; i < dataFromDataBase.size(); i++) { 
       final String groupId = dataFromDataBase.get(i).getId(); 
       if (!listenedUserGroups.contains(groupId)) { 
        listenedUserGroups.add(groupId); 
        try { 
         Firebase mFirebaseRef = new Firebase(Constants.FIRE_BASE_URL).child(Constants.CHAT_TYPE_GROUP + File.separator + groupId); 
         childEventListeners.add(mFirebaseRef.addChildEventListener(new ChildEventListener() { 
          @Override 
          public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { 
           ChatData chatData = dataSnapshot.getValue(ChatData.class); 
           if (!messagesActions.isMessageAvailable(chatData.getMessageId())) 
            handleReceivedMessage(groupId, chatData); 
          } 

          @Override 
          public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

          } 

          @Override 
          public void onChildRemoved(DataSnapshot dataSnapshot) { 
           handleRemovedMessage(dataSnapshot.getKey()); 
          } 

          @Override 
          public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

          } 

          @Override 
          public void onCancelled(FirebaseError firebaseError) { 

          } 
         })); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

上述方法我写听一个号码在一个用户组具有在聊天应用程序的用户可能可以具有多于100组和我用于循环听通过创建回调在线的每个节点,并能正常工作,现在我想删除所有这些监听器当用户点击退出,我怎么能做到这一点在拆卸多个回调一旦在火力地堡

+0

意味着我应该保留所有的firebase引用和回调引用,当我需要删除它们时 –

+0

没有保持监听器,也将保留相应的FireBase参考也删除它们,当我希望,谢谢弗兰克范,是有任何方法来检查一个听众是否完全删除,否则我可能会收到我注销后的消息:( –

+0

清理注释,因为我把它们写入答案... –

回答

1

既然你已经保持了听众的名单:

childEventListeners.add(mFirebaseRef.addChildEventListener(new ChildEventListener() {.... 

你可以通过遍历它们并调用来删除它们每个。

也看到了这个问题:How stop Listening to firebase location in android

的火力地堡服务器将停止发送邮件时,你已经注册的监听器。有可能是在客户端的一些挥之不去的事件,但这是一个非常小的数字,通常不值得关心。

如果您要关心并保证您在用户注销时不处理更多事件,则可以在事件中保留自己的布尔型isLoggedInif (isLoggedIn)