Как предварительно загрузить данные из firestore при запуске приложения? - PullRequest
0 голосов
/ 05 марта 2019

Я создаю приложение, которое отслеживает местоположение близлежащих кафе и позволяет пользователям просматривать доступные продукты каждого магазина.Я использую Firestore для хранения всех данных по каждому продукту и демонстрации этих данных пользователю через программу recyclerview + firestoreRecyclerAdapter.Оно работает.Однако данные о продукте загружаются очень медленно.Потребуется несколько секунд или даже минут, чтобы загрузить программу просмотра.Даже после полной загрузки рециркулятора эта проблема сохраняется.

Теперь, я думаю, это потому, что он читает из базы данных, перегружая основной поток пользовательского интерфейса.Поэтому я попытался выполнить эти операции чтения в asyncTask, но я не могу извлечь значения из asyncTask, так как он выводит данные после того, как активность запросила их.Выдает мне ошибку.

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

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

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

1 Ответ

0 голосов
/ 05 марта 2019

В базе данных Firestore по умолчанию включено автономное сохранение для мобильных платформ.Это означает, что он сохраняет загруженные данные и то, что вы запросили в кеше.Попробуйте прочитать это https://firebase.google.com/docs/firestore/manage-data/enable-offline.Также не пытайтесь сохранять свои данные в общих настройках, они предназначены для хранения небольших порций данных, хранящихся в паре ключ / значение.Точнее говоря, я думаю, что проблема с производительностью заключается в вашем коде.

Я бы предложил несколько вещей: перенести реализацию вашего кода в вашу деятельность / фрагмент - из вашего адаптера. (Просто создайте интерфейсы, с помощью которых вы можетеработать, чтобы открыть новое действие / фрагмент / onClick что-то и т. д. с вашими элементами в адаптере)

Я также настоятельно рекомендую использовать Livedata + ViewModel, это очень помогло мне справиться с проблемами производительности.Проверьте этот блог https://firebase.googleblog.com/2017/12/using-android-architecture-components.html.Это помогло мне понять принципы и реализовать это в моем коде.Удачи!

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