Firebase管理员Java SDK-发生事件时,此时获取更改数据而不是所有数据

时间:2018-10-04 13:22:21

标签: java firebase firebase-realtime-database firebase-admin

我正在使用以下Firebase-admin 6.5.0版

我的数据库结构如下

-DB  
  -chat  
     -branches  
      - 1  
      - 2  
        - users  
        - message
         -1  
          - content : "hi",  
          - messageType : "text"  
         -2
          - content : "hello",
          - messageType : "text"
      - 3

在上面的结构中,我在下面的分支级别听孩子

ref.child("chat").child("branches").addValueEventListener()

无论何时添加一些新消息,我都会在分支下接收所有数据,而不仅仅是更改的分支。即我在上述数据结构中获得了1,2,3所有分支数据。

有什么办法只能获取更改的子数据?

。即聊天-分支-2-消息-内容(如果内容被更改)。


根据以下回复进行编辑

如果我正在收听使用消息2所做的更改 ref.child(“聊天”).child(“分支”).addChildEventListener(new ChildEventListener())

对于分支子节点,它只给出2条消息,而对于消息子节点,它给出所有消息。如何仅获取已更改的消息子代详细信息。

我正尝试这样查询 chat.branches。$ branchid.message。$ messageid

2 个答案:

答案 0 :(得分:2)

ValueEventListener始终会获取您将其附加到的整个位置的快照。

如果要获取特定孩子的快照,则应使用ChildEventListener

ref.child("chat").child("branches").addChildEventListener(new ChildEventListener() {
  public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
    System.out.println(snapshot.getKey()+" was added after "+previousChildKey);
  }
  public void onChildChanged(DataSnapshot snapshot) {
    System.out.println(snapshot.getKey()+" was changed");
  }
  ...

首次附加此侦听器时,将为每个分支调用onChildAdded方法。之后,如果您更改了单个分支,则仅对该分支调用onChildChanged方法。

答案 1 :(得分:1)

{{1}}

有关更多信息,您可以在此处 click