我有一个名为“聊天”的节点,该节点下有许多具有特定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
答案 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) {
}
});