firebase dataSnapshot.getValue()使android应用程序崩溃

firebase dataSnapshot.getValue()使android应用程序崩溃,android,firebase,firebase-realtime-database,getvalue,Android,Firebase,Firebase Realtime Database,Getvalue,我已经组装了一个非常简单的android应用程序来习惯在android上使用firebase。在开始部分之后,我能够毫无问题地写入数据库。但是当我用getValue从数据库检索数据时,应用程序崩溃了 我尝试使用以下代码读取数据库: FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("message"); ValueEventLis

我已经组装了一个非常简单的android应用程序来习惯在android上使用firebase。在开始部分之后,我能够毫无问题地写入数据库。但是当我用
getValue
从数据库检索数据时,应用程序崩溃了

我尝试使用以下代码读取数据库:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");

ValueEventListener chatMessageListener = new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    TextView messages = (TextView) findViewById(R.id.old_messages);
    chatMessage ChatMessage = dataSnapshot.getValue(chatMessage.class);
    String message = dataSnapshot.toString();
  }

  @Override
  public void onCancelled(DatabaseError error) { 
    //.... 
  }
 };
myRef.addValueEventListener(chatMessageListener);
JSON非常简单:

我还创建了用于写入数据的“chatMessage”:

@IgnoreExtraProperties
private static class chatMessage {
  public String message;
  public String messageFrom;
  public String messageTo;

  public chatMessage() {  }

  public chatMessage(String message, String messageFrom, String messageTo) {
    this.message = message;
    this.messageFrom = messageFrom;
    this.messageTo = messageTo;
  }

  public String getMessage(){
    return message;
  }

  public String getMessageFrom(){
    return messageFrom;
  }

  public String getMessageTo(){
    return messageTo;
  }
}

我发现你的代码有一些问题

首先,您的
chatMessage
类不是用java模式编写的。每个类名必须以大写字母开头

private static class ChatMessage {
您的两个构造函数也必须以大写字母开头

public ChatMessage() {  }
在您的
onDataChange

ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);
此外,您应该使用
ChatMessage
对象获取消息字符串

String message = chatMessage.getMessage();

尽量避免写camelCase(例如“messageFrom”)。Firebase似乎不喜欢标签的大写字母

使用

String message = String.valueOf(dataSnapshot.getvalue());
而不是

String message = dataSnapshot.getvaluse().toString();

你面临什么问题?有任何错误消息吗?当.getValue()执行时,应用程序将关闭,错误框弹出,并表示应用程序已停止。我首先尝试了一个儿童听众,得到了同样的结果。看起来就是这样。撞击声消失了。它还没有把文本放在屏幕上,但看起来我在某种程度上比以前更好了。