Доступ к объектам базы данных Firebase ниже дочернего - PullRequest
0 голосов
/ 07 октября 2018

У меня есть такая структура данных:

enter image description here

Я звоню .addListenerForSingleValueEvent() по моей ссылке в опросах, и у меня есть сопоставленный класс Pojoна опрос.Однако, поскольку я не знаю значения ключа, я не могу получить доступ к своим элементам опроса.Есть ли способ доступа, скажем, к display_name или мне нужно знать значение ключа?

1 Ответ

0 голосов
/ 07 октября 2018

Если вы ничего не знаете об опросе, который вы хотите показать, лучшее, что вы можете сделать, это показать все опросы.Это можно сделать, подключив слушателя к /Polls:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Polls");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot pollSnapshot: dataSnapshot.getChildren()) {
            Poll poll = pollSnapshot.getValue(Poll.class);
            String key = pollSnapshot.getKey();
        }
    }

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

. Если вы хотите получить доступ к определенному опросу, вы должны знать что-то уникальное, что идентифицирует этот опрос.Простейшим из этого является знание его ключа, и в этом случае вы можете загрузить его следующим образом:

String key = "-LNlisBxkPbxd00a_QH";
ref.child(key).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Poll poll = pollSnapshot.getValue(Poll.class);
    }

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

Если вы не знаете ключ, вам нужно знать значение свойства опроса, чтобыВыбрать.Например, чтобы получить все опросы по вопросу y89yuvyu, вы можете запросить этого потомка с помощью:

ref.orderByChild("question").equalToChild("y89yuvyu").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot pollSnapshot: dataSnapshot.getChildren()) {
            Poll poll = pollSnapshot.getValue(Poll.class);
            String key = pollSnapshot.getKey();
        }
    }

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

Поскольку для этого значения вопроса может быть несколько опросов, вам придется снова просмотреть результаты, какЯ сделал выше.

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