Firestore Query Listener - PullRequest
       5

Firestore Query Listener

0 голосов
/ 23 ноября 2018

Я слушаю изменения в коллекции со слушателем

query.addSnapshotListener(new EventListener<QuerySnapshot>()

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

Можно ли сделать так, чтобы мой слушатель получал только последний документ, когда он был добавлен, а не все документы?

РЕДАКТИРОВАТЬ:

query = chatCollectionRef.whereEqualTo("receiverID", userID).whereEqualTo("senderID", targetID);
            registration = query.addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

                    if (e != null) {
                        Log.w("ListenerError", "Listen Failed");
                        return;
                    }

                    for (QueryDocumentSnapshot doc : queryDocumentSnapshots) {
                        Log.d("ListenerLog", "New Document in Listener")
                        Item item= doc.toObject(Item.class);
                        itemList.add(item);
                        recyclerAdapter.notifyDataSetChanged();
                    }
                  }
                }

Проблема в том, что когдадобавлен первый документ, мой прослушиватель, и в окне повторного просмотра показано это enter image description here

А затем, когда я добавляю второй документ, слушатель получает все два из них, не только последний, но и мой recyclerView.выглядит так

enter image description here

1 Ответ

0 голосов
/ 17 июня 2019

Снимок всегда будет возвращать полные данные, если вы хотите получить только изменения в datqa, вы должны использовать следующий код, документированный в firestore:

    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;
                        }
                    }

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