Как получить список из Firebase, чтобы избежать асинхронных

Я знаю, что, когда мы извлекаем данные из Firebase, он будет асинхронным, поэтому, в общем, я поместил бы весь код внутри addChildEventListener, например, пример, который я хочу отсортировать userListниже. Но я смущен, если Список действительно большой, как и миллион sortUser (user), так что это означает, что метод myRef.child("User").addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { User user= dataSnapshot.getValue(User.class); userList.add(user); sortUser(userList); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); будет называться миллион раз? Может кто-нибудь объяснить это мне, я новичок в firebase

ChildEventListener

android,firebase,firebase-realtime-database,

0

Ответов: 2


1 принят

В настоящее время вы используете a onChildAdded, что означает, что вы ValueEventListenerполучаете вызов для каждого дочернего узла немедленно, а затем позже, когда добавляется новый ребенок. Это действительно может быть много вызовов.

Если вы используете a onDataChange, его ValueEventListenerбудет вызываться только один раз для исходных данных (независимо от количества дочерних узлов), а затем один раз для каждого изменения.

Добавив onDataChangeв свою текущую настройку, вы можете сохранить все просто: добавьте дочерние узлы в заголовок, как вы уже делали, но только сортируйте myRef.child("User").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { sortUser(userList); } @Override public void onCancelled(DatabaseError databaseError) { throw databaseError.toException(); } }; .

User

Firebase будет только синхронизировать данные для Userузла один раз, даже если на нем есть два слушателя.


1

Вероятно, вы должны получить отсортированную на стороне сервера информацию с помощью методов порядка, а затем прослушать ее.

var userRef = firebase.database().ref('posts').orderByChild('Users');

Если я правильно понял, вам не нужна отдельная сторона сортировки клиентов.

Вы также можете фильтровать данные. Как передать документы

андроид, firebase, firebase-в режиме реального времени, базы данных,
Похожие вопросы