Вот пример фрагмента кода с прослушивателями успеха / неудачи, который работает как в сети, так и в автономном режиме.

вертировал одно из моих приложений в новый 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 не вызывается в автономном режиме с облачным пожарным хранилищем

Ответы на вопрос(3)

Ваш ответ на вопрос