2017-10-17 5 views
1

Je travaille donc sur une application qui utilise le fireestore de Firebase et je me demandais si c'était possible parce que je ne voulais pas que mon application vérifie les données qui n'existent plus sur le serveur.

Exemple:
Comment puis-je supprimer l'état disponible dans un cache local?

collectionReference.addSnapshotListener(new EventListener<QuerySnapshot>() { 
     @Override 
     public void onEvent(QuerySnapshot snapshots, FirebaseFirestoreException e) { 
      for (DocumentSnapshot snapshot : snapshots) { 
       System.out.println(snapshot.getId()); 
       // This prints document IDs of documents that were deleted 
       // from the collection when the app was not running 
      } 
     } 
    }); 


En utilisant DocumentSnapshot.exists() pour filtrer les instantanés existants que dans le serveur ne fonctionne pas


Plus d'info dans this page:

L'état initial peut venir à partir du serveur directement, ou à partir d'un cache local. Si un état est disponible dans un cache local, l'instantané de la requête est initialement rempli avec les données mises en cache, puis mis à jour avec les données du serveur lorsque le client a rattrapé l'état du serveur.

Répondre

1

Vous pouvez déterminer si l'instantané provient du cache en vérifiant ses métadonnées.

QuerySnapshot#getMetadata() renvoie un objet SnapshotMetadata. SnapshotMetadata#isFromCache() Renvoie un booléen si l'instantané provient du cache.

Si vous souhaitez être informé chaque fois que les modifications de métadonnées (afin que vous puissiez savoir si isFromCache() changements), vous devez passer des options lorsque vous ajoutez l'auditeur:

// Create options 
    QueryListenOptions options = new QueryListenOptions().includeDocumentMetadataChanges(); 

    // Pass them when you add the listener 
    collectionReference.addSnapshotListener(options, new EventListener<QuerySnapshot>() { 
     // ... 
    }); 

Voir la documentation pour addSnapshotListener