当值数据变为空时,datasnapshot键出现

时间:2019-05-08 19:07:05

标签: android firebase firebase-realtime-database

当我尝试从Firebase获取数据快照时。我没有正确获取数据。关键实际上是有价值的。

   DatabaseReference mmmmref = FirebaseDatabase.getInstance().getReference("MessageRooms")
                                    .child(id).child("messages");
mmmmref.addListenerForSingleValueEvent(new ValueEventListener() {

Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

     String ms =  dataSnapshot.getValue(message.class).getText();
}


所以我为空。

我的DataSnapshot在日志中显示为

{ key = messages, 
value = {-LeNVOFh_Bo6g7Z69Ibq=
           {text=zzzz, date=19-05-08 22:33:09, type=text}
         } 
}

这里的关键应该是这个 LeNVOFh_Bo6g7Z69Ibq ,而不是消息

我需要一个可以处理邮件列表的答案。 在db中插入代码

String RoomKey = mref.child("MessageRooms").push().getKey();
chatroomref =  mref.child("MessageRooms").child(RoomKey);
chatroomref.child("creator").setValue(FirebaseAuth.getInstance().getUid());
chatroomref.child("member").setValue(userids);
roommesssageRef = chatroomref.child("messages");

message message = new message();
message.setDate(Mfirebase.getTimeStamp());
message.setText("zzzz");
message.setType("text");

roommesssageRef.push().setValue(message);

消息模型类

public class message {

    String text;
    String type;
    String date;

    public message() {
    }

    public message(String text, String type, String date) {
        this.text = text;
        this.type = type;
        this.date = date;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}

数据库

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您的message.class具有与Firebase数据库中的类型匹配的类型,则唯一的问题就是引用。

您需要更深一层

DatabaseReference    ref = chatroomref.child("messages").child("-LeNVOFh_Bo6g7Z69lbq");

如果您使用getChildren()进行循环,请检查您的message.class以匹配与Firebase中相同的名称和变量类型。