如何在没有特定路径的孩子下添加一个孩子?

时间:2019-06-07 22:53:43

标签: java android firebase firebase-realtime-database

我有一个名为“聊天”的节点,该节点下有许多具有特定ID的聊天。这些ID为ID的节点中的每一个都包含消息。消息应添加而没有任何特定路径。我该怎么办?x

我有以下代码,但我缺少一个级别:

final DatabaseReference chat = FirebaseDatabase.getInstance().getReference("CHATS").child(chatID);
        chat.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (!dataSnapshot.exists()){
                    chat.child("_s").setValue(sender);
                    chat.child("_r").setValue(reciever);
                    chat.child("_m").setValue(msg);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

我需要在一个节点中创建值作为消息。但是它们是直接在chatID下创建的。像这样:

final DatabaseReference chat = FirebaseDatabase.getInstance().getReference("CHATS").child(chatID);
        chat.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (!dataSnapshot.exists()){
                    chat.CHILD().child("_s").setValue(sender);
                    chat.CHILD().child("_r").setValue(reciever);
                    chat.CHILD().child("_m").setValue(msg);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

结构应如下所示: https://cdn-images-1.medium.com/max/800/1*AHL1ZE8Kt1ctIL2LfZ0z1w.png

1 个答案:

答案 0 :(得分:0)

它与ValueEventListener和push()。setValu(Object)结合使用:

final String chatID = getChatLeaderID(sender, reciever);
    final DatabaseReference chat = FirebaseDatabase.getInstance().getReference("CHATS2").child(chatID);
    final HashMap<String, Object> hashMapMsg = new HashMap<>();
    hashMapMsg.put("_s", sender);
    hashMapMsg.put("_r", reciever);
    hashMapMsg.put("_m", msg);
    chat.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                chat.push().setValue(hashMapMsg);
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });