这样可以解决问题:
Firebase ref = new Firebase("https://stackoverflow.firebaseio.com/35963762");
ref.child("students/s1/lectures").addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot lessonKey: snapshot.getChildren()) {
ref.child("lectures").child(lessonKey.getValue(String.class)).addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot lectureSnapshot) {
System.out.println(lectureSnapshot.child("title").getValue());
}
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
public void onCancelled(FirebaseError firebaseError) {
}
});
输出:
lecture1
lecture2
关于您的数据结构的一些评论:
>您正在嵌套可能不嵌套的数据结构.例如,此代码现在还加载了讲座1和讲座2的学生列表,它不需要.如果您将“学生在课堂上”和“为学生讲课”移动到他们自己的顶级节点中,您将不会遇到此问题.
>您将“学生在演讲中”存储在一个数组中.这意味着如果从阵列中间删除讲座,则必须更新后面的所有讲座.更常见的方法是将讲座id存储为键,将虚拟true作为值存储:
students_per_lecture: {
"l2" : {
"s1": true,
"s2": true
}
},