Получение вложенных данных из нескольких записей в базе данных Firebase - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь извлечь вложенные данные из нескольких записей и отобразить их в ListView.Мои данные записываются так:

The first ID is a groupID and the second is the groupVaccinationID

Я хочу отобразить GroupNumber и GroupVaccinationDate всех GroupVaccination, записанных в listView, но в данный момент listView остается пустым, когда я запускаюследующий код:

listView = (ListView)findViewById(R.id.listItemAllGroupVaccinations);
        databaseReference = FirebaseDatabase.getInstance().getReference("groupVaccinations");
        groupVaccinations = new ArrayList<>();

protected void onStart(){
        super.onStart();
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot groupVaccinationSnapshot : dataSnapshot.getChildren()){
                    GroupVaccination groupVaccination = groupVaccinationSnapshot.getValue(GroupVaccination.class);
                    groupVaccinations.add(groupVaccination);
                }
                AllGroupVaccinationList groupVaccinationInfoAdapter = new AllGroupVaccinationList(ActivityAllGroupVaccinations.this, groupVaccinations);
                listView.setAdapter(groupVaccinationInfoAdapter);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

Любая помощь или предложения будут с благодарностью!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Ответ Гастона покажет вам все прививки в одной группе.Если вместо этого вы хотите показать все прививки во всех группах, вы можете зациклить вложенные снимки в вашем onDataChange:

databaseReference = FirebaseDatabase.getInstance().getReference("groupVaccinations");
groupVaccinations = new ArrayList<>();
AllGroupVaccinationList groupVaccinationInfoAdapter = new AllGroupVaccinationList(ActivityAllGroupVaccinations.this, groupVaccinations);
listView.setAdapter(groupVaccinationInfoAdapter);

databaseReference.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);
                groupVaccinations.add(groupVaccination);
            }
        }
        groupVaccinationInfoAdapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

Я также изменил код для вызова groupVaccinationInfoAdapter.notifyDataSetChanged(), чтобы вы могли сохранитьс использованием того же адаптера и при необходимости обновите его.

0 голосов
/ 28 февраля 2019

Вам нужно будет пойти на один уровень глубже, где ваш идентификатор -LZk5tpB5PXqHVJkj8Vz (GroupID) содержит все вспомогательные кнопки (groupVaccinationID) с данными внутри.

listView = (ListView)findViewById(R.id.listItemAllGroupVaccinations);
        databaseReference = FirebaseDatabase.getInstance().getReference("groupVaccinations").child("-LZk5tpB5PXqHVJkj8Vz");
        groupVaccinations = new ArrayList<>();

protected void onStart(){
        super.onStart();
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot groupVaccinationSnapshot : dataSnapshot.getChildren()){
                    GroupVaccination groupVaccination = groupVaccinationSnapshot.getValue(GroupVaccination.class);
                    groupVaccinations.add(groupVaccination);
                }
                AllGroupVaccinationList groupVaccinationInfoAdapter = new AllGroupVaccinationList(ActivityAllGroupVaccinations.this, groupVaccinations);
                listView.setAdapter(groupVaccinationInfoAdapter);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

РЕДАКТИРОВАТЬ

The -LZk5tpB5PXqHVJkj8Vz ребенка следует избегать, так как он жестко запрограммирован, чтобы показать вам этот пример, вместо этого вы должны взять этот дочерний ключ от того, где вы получили GroupID , выполняя его так, как Фрэнк говорит, что все прививки от каждого GroupID .

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