Java 如何检测指定节点中新添加的子节点的位置?

Java 如何检测指定节点中新添加的子节点的位置?,java,android,firebase-realtime-database,Java,Android,Firebase Realtime Database,目前,我建立了聊天应用程序,我想通过自己而不是FCM创建通知。 这是我的json数据 { "Message": { "SenderUID": { "CurrentUID": { "message_push_id": { "name": "abcd", "from": "abcd", "time": "abcd", "status": "abcd" },

目前,我建立了聊天应用程序,我想通过自己而不是FCM创建通知。 这是我的json数据

{
  "Message": {
    "SenderUID": {
      "CurrentUID": {
        "message_push_id": {
          "name": "abcd",
          "from": "abcd",
          "time": "abcd",
          "status": "abcd"
        },
        "message_push_id1": {
          "name": "abcd",
          "from": "abcd",
          "time": "abcd",
          "status": "abcd"
        },
        "message_push_id2": {
          "name": "abcd",
          "from": "abcd",
          "time": "abcd",
          "status": "abcd"
        }
      }
    }
  },
  "SenderUID2": {},
  "CurrentUID": {
    "message_push_id3": {
      "name": "abcd",
      "from": "abcd",
      "time": "abcd",
      "status": "abcd"
    },
    "message_push_id4": {
      "name": "abcd",
      "from": "abcd",
      "time": "abcd",
      "status": "abcd"
    },
    "message_push_id5": {
      "name": "abcd",
      "from": "abcd",
      "time": "abcd",
      "status": "abcd"
    }
  }
}
在这个json结构中,每次新消息出现时都会生成“message\u push\u id”。因此我想从消息节点获取新消息(子消息)的详细信息

为此,我使用了以下代码

     Messageref.addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot uid: dataSnapshot.getchildren()) {
             String senderUIDKey = dataSnapshot.getKey();
             if (!senderUIDKey.equal(currentuid)) {
              Messageref.child(senderUIDKey).child(currentuid).addChildEventListener(childEventListener) = new ChildEventListener() {
               @Override
               public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
                String pushkey= dataSnapshot.getKey());

                Messsage messages = dataSnapshot.getValue(Messsage.class);
                //Here i also used single value event listener of location //
Messageref.child(currentuid).child(senderUIDKey).child(pushkey)//for Main operation//
               }
              }
             }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
             System.out.println("The read failed: " + databaseError.getCode());
            }
           });
是否可以直接获取消息详细信息而不是此代码? 在这里,我试图获得新添加的子详细信息, 1.我使用addValueEventListener在Messageref中检索senderUIDKey。
2.从ValueEventListener获取senderUID后,我使用ChildEventListener检索新的子项及其键。

通过“直接”是什么意思?假设将出现新的子项(新消息),而不是仅由任何一个侦听器获取此子项详细信息。。。在这里,我使用了ValueEventlistener,而在其内部使用了ChildEventListener.,,通过此ValueEventlistener每次在添加新孩子时读取所有节点(onDatachange),以避免读取所有数据直接获取新孩子的详细信息。简言之,获取新添加孩子在消息节点中的位置,并通过使用此位置获取消息详细信息否,除非更改结构,否则无法“直接”获取更多信息。换句话说,检测Messageref中添加新子项的位置?