DataSnapshot缺少没有参数的构造函数

Dha*_*val 1 android firebase firebaseui

我正在我的应用程序中实现Firebase Recyclerview UI.我已经实现了一个recyclerview适配器,它向我显示以下异常.以下是我的适配器代码:

FirebaseRecyclerAdapter<DataSnapshot, MyHolder> recyclerAdapter = new FirebaseRecyclerAdapter<DataSnapshot, MyHolder>(
                DataSnapshot.class,
                R.layout.row_slots,
                MyHolder.class,
                databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")
        ) {
            @Override
            protected void populateViewHolder(MyHolder viewHolder, DataSnapshot model, int position) {

                System.out.println("Key : "+model.getKey());

            }

        };
Run Code Online (Sandbox Code Playgroud)

它显示以下异常: 在此输入图像描述

如何使用FirebaseRecyclerAdapter获取快照值?

Jan*_*iya 6

问题DataSnapShot缺少一个无参数的构造函数,所以你不能直接使用它像这样.

请改用其他模型类.

像这样 :

创建自己的模型FriendlyMessage:

public class FriendlyMessage {

private String text;
private String name;

// Created constructor with no Arguments 
public FriendlyMessage() {
}

public FriendlyMessage(String text, String name) {
    this.text = text;
    this.name = name;       
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)

最重要的事情,我们已经创建了构造不带任何参数 ,其在失踪DataSnapShot

注意:上面的模型类只是一个例子,因为你是firebase的新手.您可以拥有自己的模型类,其中包含您自己的参数类型和所有参数.

对您的Firebase Recyclerview使用它是这样的:

FirebaseRecyclerAdapter mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MyHolder>(
                    FriendlyMessage.class,
                    R.layout.row_slots,
                    MyHolder.class,
                    databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")) {

        @Override
        protected void populateViewHolder(MyHolder viewHolder, FriendlyMessage friendlyMessage, int position)
        {

        }
    };
Run Code Online (Sandbox Code Playgroud)

编辑:

您在数据库中推送数据的方式也很重要.直接使用您的模型类.

例如对于上面的模型FriendlyMessage推送它像这样:

FriendlyMessage friendlyMessage = new FriendlyMessage("message", "Username");
databaseReference.child(MESSAGES_CHILD).push().setValue(friendlyMessage);
Run Code Online (Sandbox Code Playgroud)

在这里,您child()将与我的实现略有不同,它只是一个例子.

对于侦听特定DataSnapShot:

databaseReference.child("users").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                //The PUSH ID OP WANTED

                System.out.println("Push Id ---"+postSnapshot.getKey()); 
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    })
Run Code Online (Sandbox Code Playgroud)

解释上面的听众.它会为您的DataSnapShot 孩子"用户"中的每个用户提供对象.您可以通过getKey()方法访问Push id .