При разработке с Firebase я вручную добавил запись данных в консоли, но забыл одну запись, из-за которой приложение вышло из строя. Я исправил проблему в консоли, но, поскольку я использовал постоянную память Firebase, исходная ошибка данных сохраняется, что приводит к сбою снова. Если я отключу сохранение, все будет хорошо, но хранилище в кэше не обновляется. Кто-нибудь имел эту проблему и нашел способ ее решить?Сброс кеша Firebase
ответ
Кэш должен обновляться автоматически. Так как это происходит в фоновом потоке без, в то время как он вызывает ваш код в основном потоке, я ожидаю, что он обновит кеш диска, даже если код приложения выйдет из строя.
Но если этого не происходит, самый быстрый способ вернуться в хорошем состоянии - очистить данные приложения для вашего приложения или полностью удалить/переустановить.
Я тоже столкнулся с этой проблемой и потерял сон из-за мысли о том, что пользователи оказались в ловушке бесконечного цикла крушения при запуске.
Как было предложено, возникает возможность возникновения проблемы в окне времени между запуском приложения и последующим приходом обновлений кеша с сервера Firebase. Если данные считываются из кэша в течение этого временного окна, а затем, если в данных отсутствует ожидаемое значение, а затем, если приложение использует данные таким образом, что предполагается, что данные не будут равны нулю, приложение выйдет из строя , Если приложение падает до обновления кеша, кеш никогда не сможет обновиться, и пользователь окажется в бесконечном цикле (без очистки данных приложения из памяти устройства).
До сих пор я рассматривал проблему, более тщательно защищая от возможности значений nil в коде, который вызывается во время запуска. Если nil проверено и неудобно найдено, то, в зависимости от ситуации, либо (1), если это возможно, и если это не приведет к дальнейшему повреждению данных, приложение заменит соответствующее значение вместо nil или иным образом (2) приложение переходит в режим ожидания в течение нескольких секунд, а затем инициирует новое чтение с проблемного узла и затем повторно запускает процедуру запуска.
Возможно, мораль этой истории никогда не предполагает, что значение не равно нулю или иным образом в пределах ожидаемого диапазона. Либо проверяйте значение при получении, либо проверяйте значение во время предполагаемого использования или и того, и другого, а затем обрабатывайте ошибки соответственно.
Спасибо, Фрэнк, мне удалось решить проблему, установив условный вызов db на получение правильных данных. Это означало, что сначала ничего не происходило, когда кеш был включен. После дополнительного перезапуска я могу снова синхронизировать кеш. Похоже, Firebase асинхронно обновляет кеш, но это происходит медленнее, чем мой код запускался. Есть ли что-то, что я могу добавить в свой код для защиты от подобных проблем? Я думаю о возможном решении, которое отключает кеширование в случае сбоя и позволяет настойчивость после синхронизации db. –