Android Firebase addOnChildListener致命异常“;“打印需求信息”;没有二传手/场

Android Firebase addOnChildListener致命异常“;“打印需求信息”;没有二传手/场,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我相信我的一切都设置正确,事实上,它甚至工作!我在日志中得到结果,直到它崩溃 我真的不明白发生了什么事 在数据库中: messages ......body ......name ......msgId ......createdat ......receiverUid ......senderUid 我的班级: public class Message { public String msgId; public Stri

我相信我的一切都设置正确,事实上,它甚至工作!我在日志中得到结果,直到它崩溃

我真的不明白发生了什么事

在数据库中:

    messages
    ......body
    ......name
    ......msgId
    ......createdat
    ......receiverUid
    ......senderUid
我的班级:

public class Message {
    public String msgId;
    public String receiverUid;
    public String senderUid;
    public String body;
    public String name;
    public Long createdat;

    public Message(){

    }

    public Message(String msgId, String receiverUid, String senderUid, String body, String name, Long createdat){
        this.msgId = msgId;
        this.receiverUid = receiverUid;
        this.senderUid = senderUid;
        this.body = body;
        this.name = name;
        this.createdat = createdat;
    }
}
给出错误的行:

Log.d("childadded ", newMessage.body);
整个命令:

public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {

            Message newMessage = dataSnapshot.getValue(Message.class);
            messageList.add(newMessage);
            //moonList.add(dataSnapshot.getValue(Memf.class));
            mMessageAdapter.notifyDataSetChanged();
            Log.d("childadded ", newMessage.body);
        }
结果是:

E/RecyclerView: No adapter attached; skipping layout
D/childadded: vatican
D/childadded: gastro
    dangers of Skynet
D/childadded: stay so
    amazing
W/ClassMapper: No setter/field for BMsZWfn7y6RceZGJeSNBbCpPmkm1 found on class com.thisapp.Message
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.dhienterprises.dhawkins.nofltr, PID: 19325
    java.lang.NullPointerException: println needs a message
如您所见,它返回了一些结果,但跳过了一些“Childadded”条目

另外,它说用户名没有字段这一事实也很奇怪。正如您所看到的,这里绝对有一个receiverUid字段。我不是很了解这个问题

为什么它工作得很好,然后崩溃

更新为我的班级添加了“getter”。。。还是不行。错误消息完全相同。结果表明,错误的真正原因只是我数据库中的某个格式错误的对象。(这就是为什么所有其他对象都导入得很好。)删除了有问题的对象,现在一切正常


接受给出的答案,因为很高兴知道只需按两个按钮就可以为整个类设置getter和setter

你的接球手不见了

使用
.getValue()
时,请注意:

此方法用于整理此快照中包含的数据 进入你选择的班级。该类必须适合2个简单的 限制条件:

  • 该类必须具有不接受参数的默认构造函数
  • 类必须为要分配的属性定义公共getter。没有公共getter的属性将设置为其 实例反序列化时的默认值
  • 我建议在定义类变量后,只需在Android Studio中执行
    Alt+Insert
    Command+N
    ,用于Mac)即可生成公共getters setter。

    理想情况下,您的类应该如下所示:

     class Message {
         private String author;
         private String text;
    
         private Message() {}
    
         public Message(String author, String text) {
             this.author = author;
             this.text = text;
         }
    
         public String getAuthor() {
             return author;
         }
    
         public String getText() {
             return text;
         }
     }
    
    
     // Later
     Message m = snapshot.getValue(Message.class);
    

    参考资料:

    像Mac键盘一样,Alt+Insert的功能是什么?(没有“插入”按钮…)除了我的功能之外,您实际上不需要getter和setter。问题原来只是我数据库中一些格式错误的对象。删除了有问题的对象和我拥有的原始代码。