如何在firebase数据库中循环访问我的数据?

时间:2017-05-22 18:01:30

标签: android firebase firebase-realtime-database

这是我在Firebase数据库中的JSON数据结构:

familylist
 |- 0
    |--children
    |   |-- 0:"FGH"
    |   |-- 1:"HJU"
    |-- code: "2222"
    |-- family: "SWE"
    |-- fatherName: "ABC"
    |-- motherName: "XYZ"

问题是我必须遍历整个循环。因此,每次检查用户输入的代码是否与此code字段匹配时,我都无法将数据库引用值硬编码为0,1,..等。 例如:

 familyListReference = firebaseDatabase.getReference("familylist/0/family");

我可以使用以下代码从特定位置获取单个值。但是,如何更改我的代码以便我可以遍历循环并获得我想要提取的数据。

// Read from Database
familyListReference.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    String familyName = (String) dataSnapshot.getValue();
    Log.d(TAG, "Family name is: " + familyName);
  }
  @Override
  public void onCancelled(DatabaseError databaseError) {
    Log.d(TAG, "Read failed");
  }
});

1 个答案:

答案 0 :(得分:1)

请使用此代码:

DatabaseReference familyListReference = FirebaseDatabase.getInstance().getReference().child("familylist");
familyListReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = (String) ds.getKey();

            DatabaseReference keyReference = FirebaseDatabase.getInstance().getReference().child("familylist").child(key);
            keyReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String code = dataSnapshot.child("code").getValue(String.class);
                    String family = dataSnapshot.child("family").getValue(String.class);
                    String fatherName = dataSnapshot.child("fatherName").getValue(String.class);
                    String motherName = dataSnapshot.child("motherName").getValue(String.class);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.d(TAG, "Read failed");
                }
            });

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Read failed");
    }
});

希望它有所帮助。