Android Firebase检索孩子的孩子

时间:2016-09-25 16:33:28

标签: android firebase firebase-realtime-database

我正在尝试从Firebase检索数据。 Info中的名称

这是我的firebase树。

enter image description here

我已经完成了这个

Firebase ref = new Firebase("https://link.firebaseio.com/Users/xxxxxxxx/Categories/drinks/");

然后我创建了我的听众

    ref.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Log.e("TOTAL ITEM " ,""+ dataSnapshot.getChildrenCount());

                    for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
                        //Item_Get_List newPost = eventSnapshot.child("Info").getValue(Item_Get_List.class);
                        System.out.println("GetChildren: "+eventSnapshot.child("Info"));
                        System.out.println("details: "+eventSnapshot.child("Info").getValue());

                    }

我在控制台中得到了这个:

E/TOTAL ITEM: 2
I/System.out: GetChildren: DataSnapshot { key = Info, value = null }
I/System.out: details: null
I/System.out: GetChildren: DataSnapshot { key = Info, value = null }
I/System.out: details: null
E/TOTAL ITEM: 2
I/System.out: GetChildren: DataSnapshot { key = Info, value = null }
I/System.out: details: null
I/System.out: GetChildren: DataSnapshot { key = Info, value = null }
I/System.out: details: null
E/TOTAL ITEM: 1
I/System.out: GetChildren: DataSnapshot { key = Info, value = {name=Pierre} }
I/System.out: details: {name=Pierre}

但如果我想做

Item_Get_List newPost = eventSnapshot.child("Info").getValue(Item_Get_List.class);
System.out.println("Name: "+newPost.getName());

我有这个错误

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.app.pierre.myapp.Item_Get_List.getName()' on a null object reference

我的Item_Get_list类如下:

public class Item_Get_List {
    private String name;

    public Item_Get_List(){

    }

    public Item_Get_List(String name){
        this.name = name;

    }

    public String getName(){
        return name;
    }
}

我做错了什么?

提前致谢

更新 我通过

找到了一个临时解决方案
if(eventSnapshot.child("Info").getValue() != null){
                        System.out.println("Name: "+newPost.getName());
                    }

但这只是暂时的,因为我知道我在这里做错了。 =(

1 个答案:

答案 0 :(得分:0)

由于您的数据树包含子中的子项,因此您需要执行两个for循环才能进入更深层。

//更改此

    for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) { //Item_Get_List newPost = eventSnapshot.child("Info").getValue(Item_Get_List.class); System.out.println("GetChildren: "+eventSnapshot.child("Info")); System.out.println("details: "+eventSnapshot.child("Info").getValue());
}

//到此

    for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) { //
        for (DataSnapshot childEventSnapshot : eventSnapshot.getChildren()) {
    Item_Get_List newPost = childEventSnapshot.child("name").getValue(Item_Get_List.class);
   System.out.println("GetChildren: "+childEventSnapshot.child("name")); System.out.println("details: "+childEventSnapshot.child("name").getValue());
    }
  }

如果这对您有任何改变,请告诉我。希望这会让你得到你想要的。如果某些事情仍然不对,请做出评论。

编辑:我认为对象null错误是由此

引起的
Item_Get_List newPost = childEventSnapshot.child("name").getValue(Item_Get_List.class);

删除.child(“名称”)并将其设为

Item_Get_List newPost = childEventSnapshot.getValue(Item_Get_List.class);