【问题标题】:Android Firebase New Message QueryAndroid Firebase 新消息查询
【发布时间】:2019-04-08 03:41:17
【问题描述】:

我在此处提供了我的 firebase 聊天室的快照。我在这里包含的代码可以检索单个节点的消息。我想通过单个查询搜索所有聊天室以查找新消息,以便我可以发送推送通知。还有如何知道一条消息是否是新消息以及我收到的最后一条消息是什么?

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】:

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

有关更多信息,请参阅:


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

两种常见的方法是:

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

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

有关更多信息,请参阅:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多