2016-09-25 4 views
2

Я пытаюсь извлечь данные из Firebase. Название внутри ИнфоAndroid 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; 
    } 
} 

То, что я сделал неправильно ??

Заранее спасибо


UPDATE Я нашел одно временное решение, делая

if(eventSnapshot.child("Info").getValue() != null){ 
         System.out.println("Name: "+newPost.getName()); 
        } 

Но это только временно, потому что я знаю, что я делаю что-то здесь не так. = (

ответ

0

В дереве данных содержит ребенок в ребенке вам необходимо выполнить два для петли, чтобы получить в более глубоком слое.

// изменить

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

Пожалуйста, дайте мне знать, если это ничего не меняет. Надеюсь, это даст вам то, что вы хотите. Сделайте комментарий, если что-то еще не так.


EDIT: Я думаю, что нулевая ошибка объекта вызывается этим

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

Remove .child ("имя") и сделать его

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

Я просто попытался , но по-прежнему возникают те же ошибки, а также все еще GetChildren: DataSnapshot {key = name, value = null} на консоли. – Pierre

+0

Эй, это на самом деле не настоящая ошибка. Вы используете это в проекте java или проекте Android?. Потому что, если вы используете в android, я бы не стал считать это ошибкой, если ваш лог-код не показывает ошибку. Это ваша обычная проверка отладки. –

+0

Я использую android, но я имею в виду, что я все еще получил: java.lang.NullPointerException: попытаться вызвать виртуальный метод 'java.lang.String com.app.pierre.myapp.Item_Get_List.getName()' для ссылки на нулевой объект, если Я добавляю System.out.println ("Name:" + newPost.getName()); – Pierre