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

问题描述 投票:0回答:3

我正在实现

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

下面是我的

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 { key = -KslrqBPRMNKkWQO15h_, value = {message=Hi 这是 sakib, user=sakib} }

android firebase firebase-realtime-database
3个回答
5
投票

您的键不匹配这就是为什么它返回空值检查您的屏幕截图和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
投票

尝试重命名您的模型

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

我遇到了同样的问题,在我将属性命名为与 Firebase 数据库中的命名完全相同后,它就起作用了。


0
投票

您可以尝试在

dataSnapshot.getChildren()
循环中使用
for

@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(); 
       }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.