Вот пример фрагмента кода с прослушивателями успеха / неудачи, который работает как в сети, так и в автономном режиме.
вертировал одно из моих приложений в новый Firestore. Я делаю такие вещи, как сохранение документа по нажатию кнопки, а затем вonSuccess
слушатель, идущий на другую деятельность.
Я также использую тот факт, что операции сохранения Firestore возвращают задачи, чтобы группировать задачи вместе, используяTasks.whenAll
:
val allTasks = Tasks.whenAll(
createSupporter(supporter),,
setStreetLookup(makeStreetKey(supporter.street_name)),
updateCircleChartForUser(statusChange, createMode = true),
updateStatusCountForUser(statusChange))
allTasks.addOnSuccessListener(this@SignUpActivity, successListener)
allTasks.addOnFailureListener(this@SignUpActivity, onFailureListener)
Наконец, я получаю идентификатор документа из успешного сохранения и сохраняю его в настройках или в локальной базе данных для последующего использования (в пределахonSuccessListener
)
Это все прекрасно работает.Пока не будет потеря сетевого подключения, Тогда все рушится, потому что задачи никогда не завершаются, и слушатели onSuccess / onFailure / onComplete никогда не вызываются. Так что приложение просто зависает.
Я работаю над этим, проверяя доступность сети перед каждым сохранением, а затем выполняю обходные пути, создавая задачи без каких-либо слушателей. Я также генерирую идентификатор документа локально с помощью генератора UUID.
Кстати, это было не то, как приложение работало со старой базой данных. В этом случае все работало хорошо в автономном режиме, и я видел, как документы синхронизировались всякий раз, когда приложение выходило в сеть.
Мой обход Firestore кажется ужасным взломом. Кто-нибудь придумал лучшее решение?
Смотрите связанныеБаза данных Firestore для вставки / удаления обратных вызовов документа, не вызываемых, когда нет соединения addOnCompleteListener не вызывается в автономном режиме с облачным пожарным хранилищем