Что произойдет, если Firestore не сможет сохранить данные - PullRequest
0 голосов
/ 10 апреля 2020

1 Предположим, что я делаю что-то вроде следующего:

FirestoreDatabase.getInstance()
                 .collection("users")
                 .add(userData); // where userData is reference to UserData object which contains many fileds 

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

Так что, когда данные отображаются в представлении реселлера, пользователь думает, что он успешно добавил данные НО , что произойдет, если запрос на запись завершится неудачно, когда данные поступят в хранилище, сработает линер списка onFailure и данные, уже находящиеся в пользовательском интерфейсе до фактической записи, исчезнут из пользовательского интерфейса ?

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

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

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

НО, что происходит, если запрос на запись не выполняется

Это означает, что у вас нет доступа для записи этих данных. onFailure() только выполняется, когда возникла проблема с записью документа, что означает, что операция записи отклонена.

Когда пользователь в автономном режиме, он все еще может использовать приложение и добавить данные и отобразить в пользовательском интерфейсе

Это происходит потому, что для Android и iOS автономное сохранение по умолчанию включено по умолчанию .

onSuccessListener запускается только тогда, когда пользователь находится в сети.

Да, onSuccessListener() запускается только при успешной операции записи, то есть операция записывается на серверах Firebase.

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

Пользователь не будет уведомлен об этом тосте, потому что эти данные еще не добавлены на сервер.

1 голос
/ 10 апреля 2020

onSuccessListener сработает, даже если пользователь не в сети, потому что по умолчанию изменение производится локально. Если он не может быть сохранен онлайн сразу, приложение попытается снова, когда соединение будет доступно. Это объясняется здесь: Доступ к данным в автономном режиме

Облачное хранилище данных поддерживает сохранение данных в автономном режиме. Эта функция кэширует копию данных Cloud Firestore, которые ваше приложение активно использует, поэтому ваше приложение может получить доступ к данным, когда устройство находится в автономном режиме. Вы можете писать, читать, слушать и запрашивать кэшированные данные. Когда устройство возвращается в оперативный режим, Cloud Firestore синхронизирует любые локальные изменения, сделанные вашим приложением, с бэкэндом Cloud Firestore .

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

РЕДАКТИРОВАТЬ: Принципиально, если данные не удастся go в базу данных по любой причине, кроме ожидания соединения inte rnet, оно не будет отображаться в пользовательском интерфейсе, который заполняется из базы данных, поэтому вам не нужно беспокоиться об исчезновении вещей позже.

0 голосов
/ 10 апреля 2020

Это потому, что данные Firestore локально сохраняются по умолчанию. Поэтому, если вы сохраняете данные в Firestore, они сохраняются в локальной базе данных. А позже, когда будет доступен inte rnet, он будет синхронизирован с сервером.

Если вы хотите избавиться от этого, используйте эту строку до того, как какая-либо операция произойдет в приложении. Более подходящим местом является класс приложения.

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(true)
        .build();
db.setFirestoreSettings(settings);

После добавления этих строк данные не могут быть сохранены в Firestore, если нет доступа к inte rnet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...