如何在Android Studio中使用从Firebase数据库查询来获取子节点而不使用唯一ID?

时间:2018-07-28 00:51:22

标签: java android firebase firebase-realtime-database

我在Android Studio中设置了RecyclerAdater,我需要将数据库指向节点Courses,以获取节点2层深处的所有子节点(CourseDate,CourseId等)。 {1}},而在Firebase中使用查询不知道其唯一ID。那我该怎么办呢?

Database picture

Courses

我正在尝试这样做,以便之后可以将查询对象传递给Query query= (Query) CourseDatabaseRefer.addChildEventListener( new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { dataSnapshot.getChildren(); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { dataSnapshot.getChildren(); } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } } ); ,如下所示;

FirebaseRecyclerOptions

但是似乎还没有解决……任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

在节点Courses中有2种深度

要解决此问题,您需要循环遍历Courses节点两次,为此,我建议您使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference coursesRef = rootRef.child("Courses");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<AllCourses> list = new ArrayList<>();
        for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
            for(DataSnapshot ds : dSnapshot.getChildren()) {
                AllCourses allCourses = ds.getValue(AllCourses.class);
                list.add(allCourses);
            }
        }

        //Do what you need to do with the list
        Log.d("TAG", list.size());
    }

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