2016-11-20 6 views
0

Я создал базу данных в Firebase с правилами следующим образом:Извлечение данных из базы данных Firebase возвращает нулевые значения

{ 
    "rules": { 
    ".read": true, 
    ".write": true 
    } 
} 

И моя база данных отображается в виде данных JSON как это:

fieldglass-aeca7 
0 
    age: 23 
    name:"shikher" 
1 
    age:24 
    name:"samarth" 

fieldglass-aeca7 
    -KWm_3CF1pSVtuy9nhFF 
     age:12 
     name:"shikhermishra" 
    -KWmaVs4frXpS_1lVhcj 
     age:13 
     name: "Shiker" 

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

класс пользователя выглядит следующим образом:

import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 




public class User { 

public int age; 
public String name; 

public User(){ 
} 
public User(int age,String name) 
{ 
    this.name=name; 
    this.age=age; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public void setName(String name) { 
    this.name = name; 
} 


public int getAge() { 
    return age; 
} 

public String getName() { 
    return name; 
} 
} 

И моя база данных выборки кода, как:

FirebaseDatabase database=FirebaseDatabase.getInstance(); 
     DatabaseReference reference=database.getReference("fieldglass-aeca7"); 

     reference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       User user=dataSnapshot.getValue(User.class); 
       Log.d("user [email protected]@*******",String.valueOf(user.getAge())); 



       assert tv != null; 
       assert tv1 != null; 
       tv.setText(String.valueOf(user.age)); 
       tv1.setText(user.name); 


      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

       Log.d("The read failed",databaseError.getDetails()); 
      } 
     }); 

Я пытаюсь принести возраст и имя и отображать его на 2 TextView сек I иметь.

Но выход я получаю

user.age=0 and user.name=null. 

Я хочу получать все данные, которые присутствуют внутри:

fieldglass-aeca7 
...... 

    fieldglass-aeca7 

это ключевое значение.

Я хочу, чтобы все данные внутри указанного выше пути показаны. Как я могу его получить?

ответ

2

Я думаю, полученное DataSnapshot похоже на массив, вы должны сначала зацикливать его детей.

Право Сценарий может быть такой:

if (dataSnapshot.hasChildren()) 
{ 
    for (DataSnapshot child : dataSnapshot.getChildren) 
    { 
      User user = child.getValue(User.class); 

      // your actions here: 
      assert tv != null; 
      assert tv1 != null; 
      tv.setText(String.valueOf(user.age)); 
      tv1.setText(user.name); 

     } 
} 

Примечание: dataSnapShot.getChildren просто возвращает Iterable<DataSnapshot>, следовательно, никаких изменений только петли.

+0

да, это работает для меня .. –