Android 我怎样才能加载更多的消息,并且仍然让侦听器侦听新的消息事件?

Android 我怎样才能加载更多的消息,并且仍然让侦听器侦听新的消息事件?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在使用Firebase实时数据库构建应用程序聊天。在添加“加载更多”功能之前,一切都正常。目前,我通过dbReference.child(childPath).addChildEventListener(childEventListener)获取最新消息(如果有人发送消息)。这种方式将有助于通过funconChildAdded获取最新消息,但它也会获取子对象中的所有消息 简而言之,我希望应用程序的聊天活动能够在启动活动或滚动到顶部时获取大量旧消息,并使用新消息收听活动。你有办法解决这个案子吗

我正在使用Firebase实时数据库构建应用程序聊天。在添加“加载更多”功能之前,一切都正常。目前,我通过
dbReference.child(childPath).addChildEventListener(childEventListener)获取最新消息(如果有人发送消息)。这种方式将有助于通过func
onChildAdded
获取最新消息,但它也会获取子对象中的所有消息

简而言之,我希望应用程序的聊天活动能够在启动活动或滚动到顶部时获取大量旧消息,并使用新消息收听活动。你有办法解决这个案子吗?下面是我用来加载最新消息的代码,但当我启动活动时,它也会检索对话中的所有消息

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) {

        }
    });
}

private void getConversations(){
dbReference=dbHelper.getDatabaseReference();
字符串childPath=“/”+FirebaseDatabaseKeyName.CONVERSATIONS.getKeyName()
+“/”+会话ID
+“/”+FirebaseDatabaseKeyName.MESSAGES.getKeyName();
dbReference.child(childPath).addChildEventListener(新的ChildEventListener()){
@凌驾
公共void onChildaded(@NonNull DataSnapshot DataSnapshot,@null字符串s){
Map objectMap=(Map)dataSnapshot.getValue();
Message Message=Message.convertObjectMap(objectMap);
如果(消息!=null){
message.setId(dataSnapshot.getKey());
adapter.addMessage(message);
smoothScrollEnd();
}
}
@凌驾
public void onChildChanged(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
公共void onChildRemoved(@NonNull DataSnapshot DataSnapshot){
}
@凌驾
public void onChildMoved(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}

如果你考虑在某个时候尝试使用,在这里你可以找到一个关于如何创建一个完整和功能的教程。同时,代替描述代码,请把它添加到你的问题中。我编辑了我的问题,“空洞的‘会话’’,我现在用来加载最新的消息,但是它还可以检索对话中的所有信息。请同时添加你的数据库结构。对不起,我更新了我的问题,谢谢。如果你考虑在某个时候尝试使用,在这里你可以找到一个关于如何创建完整和功能的教程。同时,不要描述代码,请将其添加到您的问题中。我编辑了我的问题,当前用于加载最新邮件的无效“getConversations”,但它也检索对话中的所有邮件。请同时添加您的数据库结构。抱歉,我更新了我的问题,谢谢。