Android Firebase新消息查询

问题描述 投票:0回答:1

我在这里给了我的火盆聊天室。我在这里包含的代码可以检索单个节点的消息。我想通过单个查询搜索所有聊天室的新消息,以便我可以发送推送通知。另外如何知道消息是否是新的,哪个是我收到的最后一条消息?

private void loadEventListFromDatabase() 
{
    DatabaseRef.userRef.child("ChatRoom").child(roomID).addChildEventListener(new ChildEventListener() {

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

            GetMessage getMessage = dataSnapshot.getValue(GetMessage.class);
            Message message = new Message(getMessage.getMessageBody(),getMessage.getCreator(),imageCode);
            recyclerViewRCV.setLayoutManager(getMyLinearLayout());
            recieveMessageList.add(message);
            recieveMsgAdapter.notifyDataSetChanged();

        }

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

        }
    });
}

android firebase-realtime-database
1个回答
0
投票

Firebase数据库查询在节点列表上运行,而不是在树上运行。如果要获取所有房间中所有新消息的列表,则必须列出所有房间中的所有消息。

有关详细信息,请参阅:


当您附加侦听器时,Firebase没有内置任何内容来跟踪两次消息的新内容。这意味着您需要自己构建它。

两种常见的方法是:

  • 准确跟踪每个用户阅读的消息。
  • 跟踪每个用户已阅读的最新消息。

后者是迄今为止最简单和最常见的。在您的情况下,您可以简单地保留用户看到的最后一条消息的密钥(在数据库中,或在应用程序的本地存储中),然后在下次使用ref.orderByKey().startAt(lastKeySeen)时传递它。

有关详细信息,请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.