Это моя структура базы данных Firebase в реальном времени:

Как получить эти данные в списке для передачи данных классу модели.
Когда я попытался сгенерировать данные, как показано ниже, и он работает.
listCourse = new ArrayList<>();
listCourse.add(new CourseModel("UserID", "CourseCode", "CourseName"));
listCourse.add(new CourseModel("122345", "TMN1234","System Programming"));
Я просто хочу получить данные из firebase в этом формате ..
Большое спасибо за ваше предложение ... но есть ли простой способ сделать это? поскольку у меня уже есть класс модели, recyclerviewadapter все на месте и отлично работает со списком, который я создал, который я опубликовал. мне просто нужно получить данные в этом формате от firebase .. Буду очень благодарен за любую дальнейшую помощь .. @AtifAbbAsi




Вы можете получить список этим методом.
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
Я пробовал этот способ раньше, но он показывает 'int java.util.List.size ()' в ссылке на нулевой объект ... когда я пытаюсь добавить его в List <CourseModel> listCourse ..
вы можете показать код для ссылки на нулевой объект? Вы правильно инициализировали? ИЛИ попробуйте это: list.add (конечно)
Привет! @Jay, извините, я, по-видимому, не поместил recyclerview в правильное место. Теперь он работает ... спасибо за ваш ответ ...
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++;
}
}
Я понял .. это работает для меня ..
Чтобы получить доступ к ребенку, вы можете создать ссылку.!
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());
}
});
да ... тот, который я пробовал раньше, но мне нужны дочерний узел и родительский узел в том же массиве List, поэтому мой лучше работает для меня ... вместо того, чтобы создавать объект и передавать его объекту массива ... В любом случае спасибо лот за ваше предложение ..
получите этот список и объедините его с вашей моделью
Чтобы решить эту проблему, есть способы. Сначала нужно получить данные как объекты класса 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);