Android Firebase DataSnapshot类将null返回给自定义java对象

时间:2017-09-01 09:04:43

标签: android firebase firebase-realtime-database

我正在实现Firebase并且DataSnapshot将null返回给自定义java对象。我尝试通过使用此网站的一些答案来解决这个问题,但我不知道我的代码中的确切问题在哪里。 在这里,我附上screenshot firebase database model所以请帮助我解决此问题enter image description here

以下是我的 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}}

3 个答案:

答案 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();

     }
  }