Получение данных Firebase в массиве

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

Получение данных Firebase в массиве

Как получить эти данные в списке для передачи данных классу модели.

Когда я попытался сгенерировать данные, как показано ниже, и он работает.

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

Я просто хочу получить данные из firebase в этом формате ..

github.com/AtifAbbAsi19/Firebase-Helper/tree/master/app/src/‌… проверка
Atif AbbAsi 08.04.2018 09:49

Большое спасибо за ваше предложение ... но есть ли простой способ сделать это? поскольку у меня уже есть класс модели, recyclerviewadapter все на месте и отлично работает со списком, который я создал, который я опубликовал. мне просто нужно получить данные в этом формате от firebase .. Буду очень благодарен за любую дальнейшую помощь .. @AtifAbbAsi

user8554744 08.04.2018 10:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 768
4

Ответы 4

Вы можете получить список этим методом.

  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 ..

user8554744 08.04.2018 10:18

вы можете показать код для ссылки на нулевой объект? Вы правильно инициализировали? ИЛИ попробуйте это: list.add (конечно)

Jay Jhaveri 08.04.2018 19:52

Привет! @Jay, извините, я, по-видимому, не поместил recyclerview в правильное место. Теперь он работает ... спасибо за ваш ответ ...

user8554744 08.04.2018 21:19
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, поэтому мой лучше работает для меня ... вместо того, чтобы создавать объект и передавать его объекту массива ... В любом случае спасибо лот за ваше предложение ..

user8554744 09.04.2018 14:34

получите этот список и объедините его с вашей моделью

Atif AbbAsi 09.04.2018 14:56

Чтобы решить эту проблему, есть способы. Сначала нужно получить данные как объекты класса 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);

Другие вопросы по теме