Как постоянство Firestore действительно работает? - PullRequest
0 голосов
/ 09 апреля 2019

Я прочитал это в документации :

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

...

Для Android и iOS автономное сохранение включено по умолчанию. к отключите сохранение, установите опцию PersistenceEnabled на false.

В Android я создаю ссылку на Firestore следующим образом:

final FirebaseFirestore db = FirebaseFirestore.getInstance();

Тогда я предполагаю, что постоянство включено по умолчанию.

Я попытаюсь объяснить этим изображением, что происходит:

enter image description here

A

  • Я добавил этот документ вчера и прочитал его обычно с подключенным устройством .

  • Сегодня я могу прочитать этот документ на устройстве Офлайн .

B

  • Вчера я тоже добавил этот документ. Устройство было подключено к сети после существования этого документа, но я не читал этот документ . Это было добавлено, но никогда не читалось.
  • Сегодня с устройством в автономном режиме Я пытаюсь прочитать этот документ, но это невозможно. (Почему не было синхронизации во время работы устройства?)

C

Вчера у меня был доступ к коллекции 6, документу 03000503 ...

Постоянство не включено для всей коллекции ?

Когда я добавляю документ 03030501, этот документ не синхронизируется с устройством, когда он включен? Если я не читаю документ один раз в режиме онлайн , не происходит синхронизация? В этом случае синхронизация не для всех документов в сбор 6 ?

Мне нужно, чтобы, если я добавлю один документ в коллекцию 6, устройство синхронизировало этот документ, когда он в сети, без необходимости вводить этот новый документ. Это возможно?


Вот код для чтения документов:

public void launchFirestore() {
    final FirebaseFirestore db = FirebaseFirestore.getInstance();
    String fechaDD = strFechaHoy.substring(6, 8);
    String fechaMM = strFechaHoy.substring(4, 6);
    String fechaYYYY = strFechaHoy.substring(0, 4);

    DocumentReference calRef = db.collection(CALENDAR_PATH).document(fechaYYYY).collection(fechaMM).document(fechaDD);
    calRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot calSnapshot,
                            @Nullable FirebaseFirestoreException e) {
            DocumentReference dataRef=calSnapshot.getDocumentReference(VISPERAS_ID);
            if (e != null || dataRef==null) {
                launchVolley();
                return;
            }

            if (calSnapshot != null && calSnapshot.exists()) {
                dataRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                    @Override
                    public void onSuccess(DocumentSnapshot dataSnapshot) {
                        //Log.d(TAG,"---"+dataSnapshot.toString());
                        mBreviario = dataSnapshot.toObject(Breviario.class);
                        showData();
                    }
                });
            } else {
                launchVolley();
            }
        }
    });
}

1 Ответ

1 голос
/ 09 апреля 2019

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

На той же странице документации, на которую вы ссылались:

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

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

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

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