firebase dataSnapshot.getValue() 崩溃 android 应用

firebase dataSnapshot.getValue() crashes android app

我组装了一个非常简单的 android 应用程序来习惯在 android 上使用 firebase。在 Firebase's docs 的入门部分之后,我可以毫无问题地写入数据库。但是,当我使用 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 很简单: this is taken from firebase, this data was provided from the app

我还创建了 "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;
  }
}

我发现您的代码存在一些问题。

首先你的chatMessageclass没有写在java模式中。每个 class 名称必须以大写字母开头。

private static class ChatMessage {

你的两个构造函数也必须以大写字母开头

public ChatMessage() {  }

在你的 onDataChange

ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);

此外,您应该使用 ChatMessage 对象

获取消息字符串
String message = chatMessage.getMessage();

尽量避免驼峰式书写(例如 "messageFrom")。 Firebase 似乎不喜欢标签的大写字母

使用

将对象更改为String
String message = String.valueOf(dataSnapshot.getvalue());

而不是

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