Как читать все дочерние узлы Firebase и отслеживать изменения - PullRequest
0 голосов
/ 07 мая 2018

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

Единственный способ сделать это - сначала позвонить Query.addListenerForSingleValueEvent(), чтобы получить начальное состояние. Получив результат, я знаю, что мой локальный кеш заполнен, и теперь я могу позвонить Query.addChildEventListener(), чтобы получать обновления при добавлении и удалении дочерних элементов.

Однако это кажется неэффективным - теперь весь список детей отправляется по сети дважды, и мне нужно добавить проверку, чтобы пропустить записи, поступающие с addChildEventListener(), которые я уже получил с addListenerForSingleValueEvent().

Это не так уж важно, но мне интересно, есть ли лучший способ - разве нет способа просто позвонить addChildEventListener() и получить сигнал, когда все записи отправлены?

1 Ответ

0 голосов
/ 07 мая 2018

Чтобы начать синхронизацию данных и , когда начальная синхронизация будет завершена, вам нужно добавить двух слушателей.

  1. a ChildEventListener для обработки актуальных обновлений.
  2. a ValueEventListener для определения момента отправки полного обновления.

Для исходных данных из базы данных ваш ChildEventListener.onChildAdded будет вызываться первым для каждого дочернего узла. После этого будет вызван ValueEventListener.onDataChange.

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

Обратите внимание, что Firebase передает данные только один раз, даже если есть несколько прослушивателей для этих данных. Поэтому, если вы подключите обоих слушателей к одному и тому же местоположению, данные будут прочитаны только один раз.

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