我正在实现Firebase
并且DataSnapshot
将null返回给自定义java对象。我尝试通过使用此网站的一些答案来解决这个问题,但我不知道我的代码中的确切问题在哪里。
在这里,我附上screenshot
firebase database
model
所以请帮助我解决此问题
以下是我的 public class ChatModel {
private String messege;
private String user;
private int intType;
public ChatModel(){}
public ChatModel(String messege, String user, int intType) {
this.messege = messege;
this.user = user;
this.intType = intType;
}
public String getMessege() {
return messege;
}
public void setMessege(String messege) {
this.messege = messege;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public int getIntType() {
return intType;
}
public void setIntType(int intType) {
this.intType = intType;
}
}
。
activity
这是我的DatabaseReference messagesReference = reference1.child("messages/"+ UserDetails.username + "_" + UserDetails.chatWith);
Log.e("messages URL "," ==>"+messagesReference);
messagesReference .addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.e("messages Referencev "," ==>"+dataSnapshot.toString());
ChatModel map = dataSnapshot.getValue(ChatModel.class);
String message = map.getMessege();
String userName = map.getUser();
Log.e("message "," ==>"+message); // Here I am getting null value
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
代码。
logcat
和{
members {
id
lastName
}
}
会显示此消息。
==> DataSnapshot {key = -KslrqBPRMNKkWQO15h_,value = {message = Hi这是sakib,user = sakib}}
答案 0 :(得分:3)
你的密钥不匹配这就是为什么它返回null值检查你的截图和ChatModel类,从ChatModel类变量中删除str
,然后再次生成getter setter
这可能会对您有所帮助。
public class ChatModel {
private String messege;
private String user;
private int intType;
// TODO generate getter setter again
}
你也可以通过地图获得价值
Map<String,String> map=(Map<String,String>)dataSnapshot.getValue();
String message = map.get("message");
String userName = map.get("user");
Log.e("message "," ==>"+message);
答案 1 :(得分:0)
尝试重命名模型
private String message;
public String getMessage(){ return message;}
我遇到了同样的问题,并且在我将这些属性命名为与firebase数据库中的名称完全相同之后,它才起作用。
答案 2 :(得分:0)
您可以尝试在for循环中使用dataSnapshot.getChildren()
,如下所示:
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.exists()) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
ChatModel map = snapshot.getValue(ChatModel.class);
String message = map.getMessege();
String userName = map.getUser();
}
}