【问题标题】:Detaching multiple callbacks at once in Firebase在 Firebase 中一次分离多个回调
【发布时间】: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,因为我把它们写成了答案...

标签: android firebase


【解决方案1】:

因为您已经保留了听众名单:

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

您可以通过遍历它们并为每个调用 removeEventListener() 来删除所有这些。

另见这个问题:How stop Listening to firebase location in android

当您取消注册监听器后,Firebase 服务器将停止发送消息。客户端中可能有一些挥之不去的事件,但这是一个非常小的数字,通常不值得关心。

如果您想关心并保证在用户注销时不再处理任何事件,您可以在事件中保留自己的布尔值 isLoggedInif (isLoggedIn)

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 2020-05-06
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2020-02-04
    相关资源
    最近更新 更多