在聊天中处理消息的正确方法

时间:2017-09-10 10:29:23

标签: android firebase firebase-realtime-database chat

我最近在我的应用中添加了聊天功能。 我将邮件及其时间戳存储在Firebase database中。

我正在试图找出一种显示(在当前聊天室中)只有最后一个(让我们说)60条消息的方式。这意味着只使用limitToLast()从Firebase检索当前会话的最后60个项目。

此外,我想添加一个Load more按钮,该按钮仅在通过向上滑动达到60条消息限制时出现,并且应该加载另外60条。

如上所述,是否有正确处理邮件存档的方法?

使用下面的代码我实际上检索了整个特定的消息存档。当特定的聊天档案有数千条消息时,我觉得这无效。

  mChildEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);
                mMessageAdapter.add(chatMessage);


            }

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

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
        mDatabaseReference.child("chat_messages").child(chatId).addChildEventListener(mChildEventListener);

1 个答案:

答案 0 :(得分:1)

为实现这一目标,我使用以下逻辑重新命令:

pageEndOffset = 0;
pageLimit = 60;

pageEndOffset += pageLimit;

Query query = mDatabaseReference.child("chat_messages")
    .orderByChild("chatId").limitToFirst(pageLimit)
    .startAt(pageEndOffset);
query.addValueEventListener(YourActivity.this);

希望它有所帮助。