firebase dataSnapshot.getValue()崩溃了Android应用程序

时间:2016-07-02 19:39:29

标签: android firebase firebase-realtime-database getvalue

我已经整理了一个非常简单的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;
  }
}

3 个答案:

答案 0 :(得分:2)

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

首先,你的chatMessage类没有用java模式编写。每个班级名称必须以大写字母开头。

private static class ChatMessage {

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

开头
public ChatMessage() {  }

onDataChange

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

另外,您应该使用ChatMessage对象

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

答案 1 :(得分:-1)

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

答案 2 :(得分:-1)

使用

将对象更改为atrb_paramCfg_ts atrb_paramCfg_s[] = { {0,{ClassCfg1_s}}, {0,{ClassCfg2_s}}, };
String

代替

String message = String.valueOf(dataSnapshot.getvalue());