如何加载更多消息,同时仍保持侦听器侦听新消息事件?

时间:2019-06-04 14:34:44

标签: android firebase firebase-realtime-database

我正在使用Firebase实时数据库建立应用聊天。在我要添加“加载更多”功能之前,一切正常。目前,我收到dbReference.child(childPath).addChildEventListener(childEventListener);发出的最新消息(如果有人发送消息)。这种方式将有助于通过功能onChildAdded获取最新消息,但也可以在子级中获取所有消息。

简而言之,我希望应用程序的聊天活动在启动“活动”时或在滚动到顶部时能够获得许多旧消息,并用新消息收听事件。您有办法解决这种情况吗?下面是我用来加载最新消息的代码,但是当我开始活动时,它也会检索对话中的所有消息。

This is db structure

private void getConversations() {
    dbReference = dbHelper.getDatabaseReference();
    String childPath = "/" + FirebaseDatabaseKeyName.CONVERSATIONS.getKeyName()
            + "/" + conversationId
            + "/" + FirebaseDatabaseKeyName.MESSAGES.getKeyName();

    dbReference.child(childPath).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Map<String, Object> objectMap = (Map<String, Object>) dataSnapshot.getValue();
            Message message = Message.convertObjectMap(objectMap);
            if (message != null) {
                message.setId(dataSnapshot.getKey());
                adapter.addMessage(message);
                smoothScrollEnd();
            }
        }

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

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

0 个答案:

没有答案