#java #firebase #firebase-realtime-database
# #java #огневая база #firebase-база данных в реальном времени
Вопрос:
Моя база данных Firebase выглядит следующим образом
Когда была запущена приведенная ниже кодировка:
String loc=(snapshot.child("loc").getvalue()).tostring();
Выходные данные, которые я получаю, имеют разную последовательность с базой данных:
Почему это так?
Комментарии:
1. Важен ли порядок?
2. Да, порядок очень важен.
3. можете ли вы показать ссылку на базу данных firebase, я думаю, что ваша ссылка на firebase указывает не на тот узел
4. @jwen Тогда почему вы не используете
child("loc").orderByKey()
?5. @cricket_007 виноват, дело сделано. Большое вам спасибо.
Ответ №1:
Данные Firebase хранятся в формате JSON и по своей сути неупорядочены.
Если вы хотите получить доступ к данным в определенном порядке, вы должны указать orderBy
предложение для своего запроса и получить доступ к данным, используя метод моментального getChildren()
снимка.
Допустим, вы хотите регистрировать элементы по возрастанию ключа:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getRef();
Query locations = rootRef.orderByKey();
locations.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot locSnapshot: snapshot.getChildren()) {
System.out.println(locSnapshot.getKey() ": " locSnapshot.getValue(String.class));
}
}
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
});
Этот пример взят (изменен) из документации Firebase по спискам чтения данных.
Ответ №2:
Фрэнк опередил меня в моем редактировании, проверьте его правильное решение, используя orderBy....
Вам нужно использовать forEach
, а не child
метод (или child.foreach
)
Вот фрагмент из документа:
Из-за того, как работают объекты JavaScript, порядок данных в объекте JavaScript, возвращаемом val(), не гарантируется, что он соответствует порядку на сервере или порядку событий child_added . Вот где forEach() пригодится. Это гарантирует, что дочерние элементы DataSnapshot будут повторяться в порядке их запроса.
Источник: https://firebase.google.com/docs/reference/js/firebase.database .DataSnapshot#forEach
Комментарии:
1. Это вопрос Java. Почему вы цитируете библиотеку JavaScript?
2. Я имел в виду больше, что
forEach
это не метод Java API3. Правильно, позвольте мне это исправить.