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;
}
}
我发现您的代码存在一些问题。
首先你的chatMessage
class没有写在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();
我组装了一个非常简单的 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;
}
}
我发现您的代码存在一些问题。
首先你的chatMessage
class没有写在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();