如何使用Android从Firebase数据库获取嵌套的Child?

时间:2017-01-11 12:30:28

标签: android firebase firebase-realtime-database

我想从这种类型的JSON树中获取所有允许孩子的列表:

databaseRef.child('Users').child('Allowded').addValueEventListener(new ValueEventListener() {

@Override
public void onDataChange (DataSnapshot dataSnapshot) {

  //
  }
}

@Override
public void onCancelled (DatabaseError databaseError) {

} };);

enter image description here

3 个答案:

答案 0 :(得分:2)

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference userRef = database.getReference("users").child(key).child("Alloweded");
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    User userObj = dataSnapshot.getValue(User.class);

}

@Override
public void onCancelled(DatabaseError databaseError) {
    // Getting Post failed, log a message
    Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
    // ...
}
};userRef.addValueEventListener(postListener);
  

User是你的Model类,它有lat,lng,name,no。,profileUrl等

试试这个我希望它运作正常。

答案 1 :(得分:1)

Firebase侦听器会同时触发初始数据和任何更改。

如果您正在寻找同步集合中的数据,请使用 ChildEventListener 。如果您要查找同步单个对象,请使用 ValueEventListener 。请注意,在这两种情况下,您都没有"得到"数据。您正在同步它,这意味着可以多次调用回调:初始数据和数据更新时。

FirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot snapshot) {
  System.out.println(snapshot.getValue());  //prints "Do you have data? You'll 
    love Firebase."
 }
@Override
 public void onCancelled(DatabaseError databaseError) {        
}
 });

答案 2 :(得分:0)

databaseRef.child('Users').child('Allowded').addValueEventListener(new ValueEventListener() {

@Override
public void onDataChange (DataSnapshot dataSnapshot) {

   for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
        Log.d(TAG, "onDataChange: 1    " + childDataSnapshot.getKey());
            for (DataSnapshot childDataSnapshot2 : childDataSnapshot.getChildren()){
                Log.d(TAG, "onDataChange: 2    " + childDataSnapshot2.getKey());
            }
   }

  }
}

@Override
public void onCancelled (DatabaseError databaseError) {

} };);