androidfirebasefirebase-realtime-database

Android Firebase DataSnapshot class returning null to custom java object


I am implementing Firebase and DataSnapshot return null to custom java object. I have try to solved this issue by following some answer using this site also but I don't know where is exact issue in my code. Here I am attaching my screenshot of firebase database so kindly help me resolve this issue enter image description here

Below is my 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;
    }
}

and here is my activitycode.

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) {

            }
        });

and logcat show message like this.
==>DataSnapshot { key = -KslrqBPRMNKkWQO15h_, value = {message=Hi This is sakib, user=sakib} }


Solution

  • Your keys are mismatch that's why it's returning null value check your screenshot and your ChatModel class, remove str from your ChatModel class variables, and generate getter setter again

    This might help you.

    public class ChatModel {
    
      private String messege;
      private String user;
      private int intType;
      // TODO generate getter setter again
    }
    

    either you can get values via map as well

    Map<String,String> map=(Map<String,String>)dataSnapshot.getValue();
    String message = map.get("message");
    String userName = map.get("user");
    Log.e("message ","  ==>"+message);