java - 如何在没有特定路径的情况下在子项下添加子项?

标签 java android firebase firebase-realtime-database

我有一个名为“Chats”的节点,该节点下有很多具有特定 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

最佳答案

它与 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) {

        }
    });

关于java - 如何在没有特定路径的情况下在子项下添加子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56501998/

相关文章:

javascript - 如何使用 AngularJS 从 Firebase 读取对象

java - 在哪里保存文本文件以便能够将其读入 Android 项目

java - Processing.org/最小 FFT 误差

java - 在java中提取两个相同字母之间的值

java - HttpURLConnection connect() 4.0 和 4.1 上出现异常,但 2.3.3 上没有

android - 多种字体在应用程序中不工作

android - 一般 Android 内存泄漏,特别是谷歌分析跟踪器

java - TreeSet搜索花费很长时间,谜题: to find lucky numbers

java - 更改后 Firebase 数据库无法正确同步

javascript - 向 firebase : data. Push() 发送数据不是函数