2017-09-01 39 views
1

我正在实施FirebaseDataSnapshot将null返回给自定义java对象。我试图通过使用本网站的一些答案来解决这个问题,但我不知道我的代码中的确切问题在哪里。 这里我附上我的firebase databasescreenshot所以好心帮我解决这个问题enter image description hereAndroid Firebase DataSnapshot类将null返回给自定义java对象

下面是我的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显示这样的消息。
==> DataSnapshot {键= -KslrqBPRMNKkWQO15h_,值= {消息=你好,这是sakib,用户= sakib}}

+0

在我的代码'message'变量返回空值 –

回答

3

键是不匹配,这就是为什么它返回空值,请检查您的屏幕截图和你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); 
+0

非常感谢你的帮助,但它显示像***一样的错误DatabaseException:无法将java.lang.String类型的对象转换为类型firebasechat.com.firebasechat .Model.ChatModel *** –

+0

@SakibSyed我在我的回答中作出了改变现在尝试 – akhilesh0707

+0

@SakibSyed你尝试过吗? – akhilesh0707

0

尝试重命名你的模型

private String message; 
public String getMessage(){ return message;} 

我有同样的问题,它的工作后,我正好命名的属性就像他们在Firebase数据库中被命名一样。

+0

@ Ben Denger我刚刚将***消息重命名为模型,但它仍然显示*** E /消息:==> null ***到'logcat' –

+0

是不是有一个孩子失踪?您正在为节点“sakib_testing”添加一个侦听器,我认为您必须迭代Datasnapshot.getchildren(),然后将其转换为chatmodel对象 –