【发布时间】:2015-10-05 11:19:43
【问题描述】:
// 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 个群组,我使用 for 循环通过创建内联回调来收听每个节点,这很有效好的,现在我想在用户单击注销时删除所有这些侦听器,我该怎么做
【问题讨论】:
-
意味着当我需要删除它们时,我应该保留所有的 firebase 引用和回调引用
-
不保留监听器,也将保留相应的 FireBase 引用以在我希望时删除它们,谢谢 Frank Van,如果我可以的话,有什么方法可以检查监听器是否完全删除我注销后也收到消息:(
-
清理 cmets,因为我把它们写成了答案...