Запрос вложенных данных из базы данных Firebase Realtime для заполнения ListView - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь заполнить ListView с помощью запроса, который будет извлекать все значения GroupVaccination с логическим значением, равным false, т.е. allVaccinated = false.База данных структурирована так: allVaccinated - это условие, которое я хочу использовать

Следующий код - это то, что я пробовал, но ничего не отображается:

     databaseReferenceGV = FirebaseDatabase.getInstance().getReference("groupVaccinations");
            groupVaccinationList = new ArrayList<>();
    groupVaccinationList.clear();

        BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            switch (item.getItemId()) {

                case R.id.navigation_vaccinations:
                    listView.setAdapter(null);
                    groupVaccinationList.clear();
                    Query toDoVaccinationQuery = databaseReferenceGV.orderByChild("groupVaccinationID/allVaccinated").equalTo(false);
                    toDoVaccinationQuery.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            for(DataSnapshot groupVaccinationSnapshot : dataSnapshot.getChildren()) {
                                for (DataSnapshot vaccinationSnapshot : groupVaccinationSnapshot.getChildren()) {
                                    GroupVaccination groupVaccination = vaccinationSnapshot.getValue(GroupVaccination.class);
                                    groupVaccinationList.add(groupVaccination);
                                }
                            }
                            AllGroupVaccinationList groupVaccinationInfoAdapter = new AllGroupVaccinationList(ActivityToDoDoses.this, groupVaccinationList);
                            listView.setAdapter(groupVaccinationInfoAdapter);
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            throw databaseError.toException();

                        }
                    });

                    return true;
                case R.id.navigation_doses:
                    //other action
            }
            return false;
        }
    };

Я не совсем уверен, как запросить базу данных Firebase, поэтому любая помощь приветствуется!Спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Нельзя использовать следующий запрос:

databaseReferenceGV.orderByChild("groupVaccinationID/allVaccinated").equalTo(false);

Поскольку между узлом groupVaccinationID и свойством allVaccinated есть еще два дочерних элемента: -LXiM ... BX9x и -LZk5 ... j8Vz.Чтобы решить эту проблему, вы можете выполнить итерацию объектов DataSnapshot дважды, используя метод getChildren() (как вы уже делаете), но в этом случае требуется только следующий запрос:

databaseReferenceGV = FirebaseDatabase.getInstance().getReference("groupVaccinations");

Затем создайте оператор ifсторона клиента:

if(!groupVaccination.getAllVaccinated()) {
    groupVaccinationList.add(groupVaccination);
}

Или вы можете изменить структуру базы данных, чтобы разрешить запрос, основанный только на одном динамическом узле.

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