簡體   English   中英

來自Firebase和Android的子列表

[英]Child List from Firebase with android

我正在嘗試獲取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),在[來源:java。]中未標記為可忽略(0個已知屬性:)。 io.StringReader@9d0f705; 行:1,列:10](通過參考鏈:com.app.pierre.myapp.get_categories [“ Name”])

我究竟做錯了什么 ?

我將此案例用作參考: https : //www.firebase.com/docs/android/guide/retrieving-data.html

首先,像這樣更改您的模型,

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邏輯並獲得直接映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM