Как посчитать количество конкретных дочерних событий в firebase для Android в Java - PullRequest
0 голосов
/ 05 июля 2018

Я делаю приложение посещаемости, и мне нужно посчитать посещаемость конкретного студента из Firebase. Мне нужно посчитать количество вхождений "prof" , и я новичок в этом.

enter image description here

 DatabaseReference attendance = FirebaseDatabase.getInstance().getReference("Attendance");
    attendance.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                totaldays++; // total class days
                if(snapshot.child("name").getValue(String.class).equals("prof")){
                    //count no of days present
                }
                Log.e(snapshot.getKey(), snapshot.getChildrenCount() + "");
            }
            Log.e(TAG, totaldays + "");
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    }); 

Но результат показывает null значение.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Чтобы решить эту проблему, вам нужно изменить структуру базы данных. Вы не можете запрашивать вашу базу данных, так как ваши узлы генерируются динамически. Как упомянул @FrankvanPuffelen в своем комментарии, узлы, которые вызывают у вас проблемы: 04Jul2018 с dcbch... и 05Jul2018 с hello. Поскольку Firebase может возвращать только результаты, которые находятся по фиксированному пути под каждым дочерним узлом узла, для решения этой проблемы я рекомендую создать дату как свойство. Вот как это можно сделать и как должна выглядеть структура вашей базы данных:

Firebase-root
   |
   --- dcbch..._dkjh...
        |
        --- Prof
             |
             --- email: "profeamil@gmail.com"
             |
             --- name: "prof"
             |
             --- present: true
             |
             --- date: 1530784439 //Current timestamp

А вот соответствующий запрос:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.orderByChild("Prof/name").equalsTo("prof");

Теперь вы можете присоединить слушателя и использовать метод getChildrenCount() для объекта DataSnapshot, чтобы получить номер вхождения.

0 голосов
/ 05 июля 2018

Если есть профессиональный случай, вы можете добавить эти дочерние данные в список. Таким образом, вы можете получить количество детей, используя list.size(), а также использовать этот список данных в других операциях, если у вас есть.

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