2016-08-16 9 views
2

При разработке с Firebase я вручную добавил запись данных в консоли, но забыл одну запись, из-за которой приложение вышло из строя. Я исправил проблему в консоли, но, поскольку я использовал постоянную память Firebase, исходная ошибка данных сохраняется, что приводит к сбою снова. Если я отключу сохранение, все будет хорошо, но хранилище в кэше не обновляется. Кто-нибудь имел эту проблему и нашел способ ее решить?Сброс кеша Firebase

ответ

0

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

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

+0

Спасибо, Фрэнк, мне удалось решить проблему, установив условный вызов db на получение правильных данных. Это означало, что сначала ничего не происходило, когда кеш был включен. После дополнительного перезапуска я могу снова синхронизировать кеш. Похоже, Firebase асинхронно обновляет кеш, но это происходит медленнее, чем мой код запускался. Есть ли что-то, что я могу добавить в свой код для защиты от подобных проблем? Я думаю о возможном решении, которое отключает кеширование в случае сбоя и позволяет настойчивость после синхронизации db. –

0

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

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

До сих пор я рассматривал проблему, более тщательно защищая от возможности значений nil в коде, который вызывается во время запуска. Если nil проверено и неудобно найдено, то, в зависимости от ситуации, либо (1), если это возможно, и если это не приведет к дальнейшему повреждению данных, приложение заменит соответствующее значение вместо nil или иным образом (2) приложение переходит в режим ожидания в течение нескольких секунд, а затем инициирует новое чтение с проблемного узла и затем повторно запускает процедуру запуска.

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