Хобрук: Ваш путь к мастерству в программировании

Firebase, как определить, доступны ли кешированные данные

У меня есть приложение, которое извлекает некоторые простые данные из базы данных Firebase Realtime, и для простоты вот поток, который я хочу иметь.

Если телефон подключен к Интернету:

  • Получить данные из базы данных firebase

Если телефон не в сети

  • If there is data in firebase cache -> get data from cache
    • If there is nothing in firebase cache -> show some default data stored locally in app

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


  • Firebase сделает это за вас без добавления кода. 16.02.2017
  • Я полагаю, что @ibrcic спрашивает, как приложение может определить, если телефон находится в автономном режиме, что запрашиваемые данные не кэшируются (и в этом случае показывать другие данные по умолчанию) 16.02.2017
  • Если вам нужен локальный кеш, который вы можете запросить на наличие данных, вам придется реализовать это самостоятельно поверх Firebase SDK. 16.02.2017
  • Есть способ определить, подключены ли вы к серверу firebase, но не способ определить, что является источником данных (кэш или удаленный сервер). 16.02.2017
  • У меня такая же проблема. Вы нашли способ узнать, есть ли какие-либо данные в кеше, если пользователь не в сети? 03.03.2017
  • Вы получили адекватный ответ? 07.06.2018
  • Нет, извините, кажется, что нет способа сделать это, поскольку Firebase не предназначен для такой работы. 07.06.2018

Ответы:


1

Согласитесь с ответом выше, Firebase сделает это за вас, если вы сделаете это правильно. Чтобы решить вашу проблему, вы должны понимать разницу между двумя подходами к автономному кешу firebase - чтением из памяти и чтением с диска.

Прочтите эту статью -> https://pamartinezandres.com/lessons-learnt-the-hard-way-using-firebase-realtime-database-c609b52b9afb

в вашем случае просто добавьте FirebaseDatabase.getInstance().setPersistenceEnabled(true);, чтобы включить чтение с диска

и добавьте yourReferenceForFirebase.keepSynced(true); для синхронизации данных

тогда ваше приложение будет работать так, как вы ожидали.

Но только эта часть: «Если в кеше firebase ничего нет -> показать некоторые данные по умолчанию, хранящиеся локально в приложении», кажется невозможным.

21.08.2018

2

Firebase сделает это за вас.

Приложения Firebase работают, даже если ваше приложение временно теряет сетевое подключение.

Также приложения Firebase автоматически обрабатывают временные сбои в сети. Кэшированные данные доступны в автономном режиме, и Firebase повторно отправляет все записи при восстановлении сетевого подключения.

Если этого недостаточно и вам нужно работать в автономном режиме, вы также можете включить сохранение диска, просто добавив:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Подробнее здесь.

РЕДАКТИРОВАТЬ:
Невозможно узнать, поступает ли значение из локального кеша или с удаленного сервера.

Есть только один способ узнать, подключено ли ваше приложение в данный момент к серверу базы данных Firebase.
Для этого вы можете определить состояние подключения, прослушивая значение .info/connected.

16.02.2017
  • Спасибо за ваш комментарий, но, к сожалению, это не совсем то, что я ищу. Я знаю, что firebase обрабатывает все эти вещи автоматически, и я настроил его для этого без проблем. Чего я не знаю, так это как определить, ЕСЛИ есть фактические кэшированные данные. Например, если пользователь запускает приложение в первый раз и не имеет подключения к Интернету. В этом случае я хочу показать некоторые данные по умолчанию, а не данные из Firebase (поскольку обратный вызов Firebase никогда не запускается). Также, если пользователь очищает кешированные данные из приложения и т. д. 16.02.2017
  • @ibrcic Я понимаю, но, на мой взгляд, вы неправильно используете firebase. Это база данных в реальном времени, а не база данных sqllite, и вы должны следовать подходу firebase. не важно показываются данные из кеша или с сервера, вы в любом случае показываете данные из firebase и если в первый раз хотите показать что-то другое то можете это сделать, просто не показывая данные firebase. Вы ищете то, чего не существует. 16.02.2017
  • Проще говоря, данные в firebase самые свежие, а данные по умолчанию в приложении — это те, которые я поместил туда при программировании приложения. Я хочу убедиться, что данные по умолчанию отображаются только тогда, когда нет подключения к Интернету И нет кэшированных данных. Я думаю, что это то, что вы должны сделать, проверить, есть ли фактические кэшированные данные, чтобы я мог отобразить что-то, если их нет. 16.02.2017
  • @ibrcic Я провел некоторые исследования и не нашел того, что вам нужно. Однако есть логическое значение, которое может сказать вам, подключены ли вы к серверу firebase или нет. Я только что отредактировал ответ с этой дополнительной информацией. 16.02.2017
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..