【问题标题】:Child List from Firebase with android来自 Firebase 与 android 的子列表
【发布时间】:2016-09-11 08:53:44
【问题描述】:

我正在尝试获取我的 firebase 树的价值

我有一个类 get_categories

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:无法识别的字段“名称”(com.app.pierre.myapp.get_categories 类),在 [Source 中未标记为可忽略(0 个已知属性:]) : java.io.StringReader@9d0f705;行:1,列:10](通过引用链:com.app.pierre.myapp.get_categories["Name"])

我做错了什么?

我用这个案例作为参考: https://www.firebase.com/docs/android/guide/retrieving-data.html

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    首先像这样改变你的模型,

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

    【讨论】:

    • 我尝试了您的解决方案,问题是我不需要推送数据,因为我已经将数据放入其中,但即使我使用您的方法设置我的数据(使用模型)。当我调用侦听器时,我收到一条错误消息。我的数据也是 Categories/push()/Details/Name=value,因为在您给我的示例中它是 Categories/Details/push()/Name=value。在我的情况下是否有任何替代方法可以在不知道 Details 的父级的情况下访问 Details 的子级,因为它是使用 push() 方法自动生成的。提前致谢
    • 尝试按照我在回答中的建议检索数据,然后按您推的方式推。
    • 据我所知,您只能按照我的建议获取数据,因为我面临同样的问题并以这种方式获取数据
    • 干得好!!我明白了!你不知道我有多高兴。过去两天我一直在检查我的代码和文档!谢谢:)
    • 欢迎您.. 乐于助人!
    【解决方案2】:

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

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

    public class get_categories {
        public String Name;
    }
    

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

    【讨论】:

    • 感谢弗兰克的提示 :)
    猜你喜欢
    • 2017-04-09
    • 2021-12-30
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多