来自Firebase和android的子列表

来自Firebase和android的子列表,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试获取firebase树的值 我有一门课要上 public class get_categories { private String Name; public get_categories(){ } public String getName(){ return Name; } } 然后我宣布了火场 mRef = new Firebase("https://...../Users/Categories"); 并尝试使用

我正在尝试获取firebase树的值

我有一门课要上

public class get_categories {
    private String Name;

    public get_categories(){

    }

    public String getName(){
        return Name;
    }
}
然后我宣布了火场

mRef = new Firebase("https://...../Users/Categories");
并尝试使用OnChildEventListener检索我的数据

mRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                Log.e("Count " ,""+dataSnapshot.getChildrenCount());
                //Log.e("VALUES " ,""+dataSnapshot.child("Details").getValue());
                get_categories getCatName = dataSnapshot.child("Details").getValue(get_categories.class);
                Log.e("NAME " ,""+getCatName.getName());
            }

            @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(FirebaseError firebaseError) {

            }
        });
但我犯了个错误

原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“Name”(class com.app.pierre.myapp.get_categories),未在[Source:java.io]处标记为可忽略(0个已知属性:])。StringReader@9d0f705;行:1,列:10](通过引用链:com.app.pierre.myapp.get_categories[“Name”])

我做错了什么

我将此案例作为参考:

首先,像这样更改您的型号

public class GetCategories {
    private String Name;

    public GetCategories(){

    }

    public GetCategories(String name){
    this.Name = name;

    }

    public String getName(){
        return Name;
    }
}
并使用模型类构造函数推送数据

GetCategories model = new GetCategories("yourValues");

mReference.child("Details").push().setValue(model);
现在你可以这样得到它

mRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {

                GetCategories newPost = eventSnapshot.getValue(GetCategories.class);

                Log.e("NAME " ,""+ newPost.getName());   

            }

        }

        @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(FirebaseError firebaseError) {

        }
    });

JSON上的属性名称以大写字母开头。但是根据JavaBean属性的规则,
getName()
对应于名为
name
的属性(带有小写的n)。所以这两个不匹配

实现此功能的一种方法是不使用setter,而是使用公共字段:

public class get_categories {
    public String Name;
}

这样,您就绕过了JavaBean逻辑,获得了一个直接映射。

我尝试了您的解决方案,问题是我不需要推送数据,因为我已经在其中获得了数据,但即使我使用了您的方法来设置数据(使用模型)。当我呼叫侦听器时,我收到一条错误消息。另外,我的数据是Categories/push()/Details/Name=value,因为在您给我的示例中,它是Categories/Details/push()/Name=value。在我的例子中,是否有其他方法可以访问Details的子级而不知道Details的父级,因为它是使用push()方法自动生成的。提前感谢您按照我在回答中的建议检索数据,并按照您的建议进行推送。我知道您只能按照我的建议获取数据,因为我面临同样的问题,并且以这种方式获取数据做得很好!!我让它工作!!!你不知道我有多高兴。。在过去的两天里,我一直在检查我的代码和文档!!谢谢:)欢迎。。很乐意帮忙!谢谢你的提示弗兰克:)