Как получить несколько дочерних узлов из firebase в android studio - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь получить данные, относящиеся к конкретному c пользователю в базе данных, которые возвращаются на экран пользователей в android studio. Данные в firebase имеют следующий формат:

"studentNumber" : {
        "1234567" : {
            "CS320" :{
                "Lab 1" : "80%",
                "Lab 2" : "90%"
            },
            "CS255" :{
                "Lab 1" :"30%"
            }
        },
        "6234567" : {
            "CS320" :{
                "Lab 1" : "70%",
                "Lab 2" : "100%"
            },

и т. Д.

Я пытаюсь получить все данные / дочерние узлы ie все модули, последующие лаборатории и последующие оценки, относящиеся к одному студенту-одиночке, вернулись на их экран в студии android, однако до сих пор я смог получить только данные, возвращающиеся на консоль в android студии, а не экран приложения.

Это код, который я использую для получения данных.

  databaseReference = FirebaseDatabase.getInstance().getReference("User").child("0000");
  databaseReference.addValueEventListener(new ValueEventListener() {
     @Override
     public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Log.v("E_Value","Data :" +dataSnapshot.getValue());
           }
   }

Любая помощь будет большой благодарностью.

1 Ответ

0 голосов
/ 10 апреля 2020

Я не тестировал код, однако схема должна выглядеть следующим образом.

Вы должны получить один ключ и вызвать функцию, чтобы получить значение и последующие узлы, связанные с ним и их значениями.

 databaseReference = FirebaseDatabase.getInstance().getReference("User").child("0000");
  databaseReference.addValueEventListener(new ValueEventListener() {
     @Override
     public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
             String studentKey = dataSnapshot1.getKey();
             fetchDetails(studentKey);
        }
     }
   }

   public void fetchDetails(String studentKey) {
       DatabaseReference ref = FirebaseDatabase.getInstance().getReference("User").child("0000").child(studentKey);
       ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
             String courseKey = dataSnapshot1.getKey(); //this should print CS320
             fetchDetailsOfCourse(courseKey);
        }
        }
     }
   }

   public void fetchDetailsOfCourse(String courseKey) {

      System.out.System.out.println("Course key: " + courseKey);
       DatabaseReference ref = FirebaseDatabase.getInstance().getReference("User").child("0000").child(studentKey).child(courseKey);
       ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String lab1 = dataSnapshot.child("lab1").getValue(String.class);
            String lab2 = dataSnapshot.child("lab2").getValue(String.class);

            System.out.println("Lab1 value: " + lab1); //this should get the values for lab1
            System.out.println("Lab2 value: " + lab2); //this should get the values for lab2

        }
        }
     }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...