По объяснению @ mikasaloli, я подозреваю, что проблема заключается скорее в смешении функций RTDB Firebase (базы данных в реальном времени) / Firestore и неправильного прослушивателя.
Первая проблема - RTDB firebase / firestoreпо умолчанию хранит локальную кэш-копию ссылок (не всех), к которым вы обращались на своем телефоне.Из их документов они говорят , и я цитирую: «Асинхронные прослушиватели: данные, хранящиеся в базе данных Firebase Realtime, извлекаются путем подключения асинхронного прослушивателя к ссылке на базу данных. Прослушиватель запускается один раз для начального состоянияданные и снова каждый раз, когда данные изменяются. Слушатель событий может получать несколько различных типов событий . Этот режим извлечения данных поддерживается в Java, Node.js и Python Admin SDK. "Что вам нужно сделать, это обойти локальный кэш при чтении данных в первый раз после запуска приложения. вот как я смог это сделать (с небольшим изменением)
Вторая проблема, как уже упоминалось ранее, addListenerForSingleValueEvent будет вызвана только один раз.Поэтому, если вы получите уведомление об изменении в первый раз, ваш слушатель автоматически отменит свою регистрацию, подразумевая, что вы не будете получать последующие события onDataChange.
Теперь, предположив из предыдущих абзацев, проблема с приведенным выше кодомis: он присоединяет слушателя к событию с одним значениемкоторый затем запускается с локальной (кэшированной) версией данных, которая принудительно не является последним состоянием базы данных сервера (если приложение находилось в автономном режиме, а некоторые изменения произошли в сети).Но затем, при подключении этого слушателя, он запускается с локальной версией данных и впоследствии отменяет регистрацию.Подразумевается, что приведенный выше код будет срабатывать не более одного раза и может никогда не сработать в течение срока его службы при подключении.
Я предлагаю вам обойти локальный кеш и использовать addValueEventListener.