Как обнаружить данные добавлены в FireStore во время автономного приложения для Android - PullRequest
0 голосов
/ 23 июня 2018

Я работаю с FireStore в Android.Я хочу, чтобы мой пользователь мог сохранять данные в приложении в автономном режиме (вставка данных в автономном режиме также работает нормально) Но я не знаю, как определить, что данные добавляются в автономном режиме, мне нужно получить документИдентификатор, который добавлен.В режиме онлайн я могу обнаружить вставку данных с прослушивателем как.

Map<String, Object> data = new HashMap<>();
data.put("name", "Tokyo");
data.put("country", "Japan");

db.collection("cities")
        .add(data)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });

Мне также нужно определить, что добавляется, когда приложение находится в автономном режиме.Так как я могу?Потому что эти слушатели работают только тогда, когда данные вставляются на сервер, а приложение получает ответ от сервера.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

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

 docRef.collection("collectioname").document("docname").set(aMap);
  String id = docRef.collection("collectioname").document("docname").getId();
            if( id != null & !id.isEmpty() & id.length() > 10) {
                //Action here
             }

Спасибо, Фрэнк, за вашу раннюю подсказку. Add () всегда записывает документ в локальный ..... в моем случае метод set ().

0 голосов
/ 24 июня 2018

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

Из документации по событиям для локальных изменений :

Локальные записи в вашем приложении немедленно вызовут прослушиватели снимков.Это связано с важной функцией, называемой «компенсацией задержки».Когда вы выполняете запись, ваши слушатели будут уведомлены с новыми данными до того, как данные будут отправлены на сервер.

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

См. В связанной документации пример кода для его обработки.

Обновление : если вы просто пытаетесь получить идентификатор нового документа, вы можете просто сделать:

DocumentReference newDoc = db.collection("cities").document();
System.out.println(newDoc.getId());
newDoc.set(data);

См. CollectionReference.document().

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