Android Firestore просмотр изменений между снимками из документа - PullRequest
0 голосов
/ 23 февраля 2019

Мы можем просматривать изменения между снимками из коллекции как официальный документ Google пример:

db.collection("cities")
        .whereEqualTo("state", "CA")
        .addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot snapshots,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w(TAG, "listen:error", e);
                    return;
                }

                for (DocumentChange dc : snapshots.getDocumentChanges()) {
                    switch (dc.getType()) {
                        case ADDED:
                            Log.d(TAG, "New city: " + dc.getDocument().getData());
                            break;
                        case MODIFIED:
                            Log.d(TAG, "Modified city: " + dc.getDocument().getData());
                            break;
                        case REMOVED:
                            Log.d(TAG, "Removed city: " + dc.getDocument().getData());
                            break;
                    }
                }
            }
        });

Но если запрос к документу, как мы можем получить информацию DocumentChange: ДОБАВЛЕНО / ИЗМЕНЕНО / УДАЛЕНО?

db.collection("cities")
        .document("SF") //Query on document "SF"
        .addSnapshotListener(new EventListener<DocumentSnapshot>() {
                @Override
                public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
            ....
            }
        });

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Одним из возможных решений является запрос этого конкретного документа из коллекции: Измените строку:

.whereEqualTo("state", "CA")

на строку:

.whereEqualTo(FieldPath.documentId(), "CA")

Полный пример:

    rootRefs.collection("cities")
            .whereEqualTo(FieldPath.documentId(), "CA") //change this line
            .addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot snapshots,
                                    @Nullable FirebaseFirestoreException e) {
                    if (e != null) {
                        Log.w(TAG, "listen:error", e);
                        return;
                    }

                    for (DocumentChange dc : snapshots.getDocumentChanges()) {
                        switch (dc.getType()) {
                            case ADDED:
                                Log.d(TAG, "New city: " + dc.getDocument().getData());
                                break;
                            case MODIFIED:
                                Log.d(TAG, "Modified city: " + dc.getDocument().getData());
                                break;
                            case REMOVED:
                                Log.d(TAG, "Removed city: " + dc.getDocument().getData());
                                break;
                        }
                    }
                }
            });
0 голосов
/ 23 февраля 2019

CollectionReference's addSnapshotListener () метод:

Начинает прослушивание этого запроса.

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

В то время как метод DocumentReference addSnapshotListener () метод:

Начинает прослушивание документа, на который ссылается этот DocumentReference.

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

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