Firebase数据检索

时间:2018-04-08 07:48:12

标签: java android firebase firebase-realtime-database android-recyclerview

这是我的Firebase实时数据库结构:

enter image description here

如何在List中获取这些数据以将数据传递给Model Class。

当我尝试使用如下的生成数据时,它可以正常工作。

listCourse = new ArrayList<>();
listCourse.add(new CourseModel("UserID", "CourseCode", "CourseName"));
listCourse.add(new CourseModel("122345", "TMN1234","System Programming"));

我只想以这种格式从firebase获取数据..

4 个答案:

答案 0 :(得分:1)

您可以通过此方法检索列表。

  Firebase ref = new Firebase(FIREBASE_URL);

  ref.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
      Log.i("Count " ,""+snapshot.getChildrenCount());
      for (DataSnapshot postSnapshot: snapshot.getChildren()) {
        CourseModel course = postSnapshot.getValue(CourseModel.class);

      }
  }
  @Override
  public void onCancelled(FirebaseError firebaseError) {
      Log.e("The read failed: " ,firebaseError.getMessage());
  }

});

请参阅此文档:https://firebase.google.com/docs/database/android/lists-of-data

答案 1 :(得分:0)

if (dataSnapshot.exists()) {

                int i = 1;
                for (DataSnapshot dataSnapshot1 : dataSnapshot.child(userID).child("Course").getChildren()) {

                    coursecode[i]= dataSnapshot1.getKey();
                    coursename[i]=dataSnapshot.child(userID).child("Course").child(coursecode[i]).child("CourseName").getValue(String.class);
                    listCourse.add(new CourseModel(userID,coursecode[i],coursename[i]));

                    i++;

                    }

                }

我明白了......这对我有用..

答案 2 :(得分:0)

要访问Child,您可以创建参考。

 DatabaseReference userRef= FirebaseDatabase.getInstance().getReference("users");
    DatabaseReference userChildRef= userRef.child(childId);
    DatabaseReference userCourseRef= userChildRef.child("courses");
    DatabaseReference userCourseIdRef= userCourseRef.child(courseId);

userCourseIdRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i(TAG, dataSnapshot.getValue(String.class);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});

答案 3 :(得分:0)

TOL解决这个问题,有办法解决。首先是将数据作为CourseModel类的对象获取,如下所示:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference coursesRef = rootRef.child("Users").child(uid).child("Courses");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<CourseModel> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            CourseModel courseModel = ds.getValue(CourseModel.class);
            list.add(courseModel);
        }
        //Do what you need to do with the list of CourseModel objects
        Log.d("TAG", list.ToString);
    }

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

第二个是将courseName作为String这样:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference coursesRef = rootRef.child("Users").child(uid).child("Courses");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String courseName = ds.child("CourseName").getValue(String.class);
            list.add(courseName);
        }
        //Do what you need to do with the list of strings
        Log.d("TAG", list.ToString);
    }

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