2015-10-05 55 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)