我正在使用Firebase数据库,我只是想知道我是否可以或如何在两个子孩子中检索数据?

时间:2018-07-26 08:02:53

标签: android firebase firebase-realtime-database firebase-authentication

This is the structure of my database:

enter image description here

我想获取所有结果值,但是在能够在结果中使用getValue()之前,我需要先循环教师和检查子。我该如何同时循环教师和应试的孩子?

这是我的代码,但是我不知道如何到达Exam子并再次循环以获取结果值。

 dbOutcome.child("sample_list").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for(DataSnapshot ds: dataSnapshot.getChildren()){


            }


        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

2 个答案:

答案 0 :(得分:1)

您可以使用模型类来检索它。 制作模型类并在其中获取数据

public class Exam {
   pirvate String outcomes;
// create constructor and getter setter
}

创建教师课程

public class Faculty {
   List<Exam> exams

// create constructor and getter setter
}

从onDataChange的快照中获取数据,就像这样

public void onDataChange(DataSnapshot dataSnapshot) {
        List<Faculty> faculties = (ArrayList<Faculty>) dataSnapshot.getValue();
 }

答案 1 :(得分:0)

  

我想获得所有结果值

假设sample_list节点是Firebase根的直接子节点,要解决此问题,您需要两次使用getChildren()方法:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("sample_list");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
            for(DataSnapshot ds : dSnapshot.getChildren()) {
                String outcome = ds.child("outcome").getValue(String.class);
                Log.d("TAG", outcome);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(valueEventListener);

您的logcat中的输出将是:

pass
fail
pass
fail