Я разрабатываю приложение в Android Studio, и я использую FireBase для хранения данных. Допустим, у меня есть узел с несколькими дочерними элементами, я хотел бы получить ключ дочернего элемента с определенным значением. Например;
Я хотел бы прочитать из узла «languages» ключ дочернего элемента со значением «English», чтобы я получил «eng». Обратите внимание, что заранее я не знаю, что это ключ "eng"!
Кто-нибудь знает способ добиться этого, не импортируя всех детей?
Попробуйте что-то вроде этого:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("languages");
ref.orderByValue().equalTo("English").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snap : dataSnapshot.getChildren()) {
String value = snap.getValue(String.class);
String key = snap.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
точно, запрос всегда возвращает все возможные местоположения, поэтому в случае, если он может иметь более одного местоположения, вы можете получить его в цикле
Отличный ответ Леви! Причина цикла действительно в том, что запрос может соответствовать нескольким результатам, поэтому он возвращает список совпадений. Даже если есть только одно совпадение, результатом будет список из одного. Таким образом, вам всегда будет нужен цикл, даже если есть только один ответ.
Спасибо, @Frank van Puffelen :)
Ах, спасибо также @Frank van Puffelen, я пытался получить ключ без петли, и тогда он давал мне «languages» вместо «eng». Теперь я понимаю, почему цикл это исправляет.
Ого, спасибо, я не смог найти это больше нигде. Причина цикла только в том, что есть несколько дочерних элементов со значением 'English', верно?