Cloud Firestore: Retrieving Cached Data Via Direct Get?
Solution 1:
Now it is possible to load data only from cached version. From docs
You can specify the source option in a get() call to change the default behavior.....you can fetch from only the offline cache.
If it fails, then you can again try for the online version.
Example:
DocumentReferencedocRef= db.collection("cities").document("SF");
// Source can be CACHE, SERVER, or DEFAULT.Sourcesource= Source.CACHE;
// Get the document, forcing the SDK to use the offline cache
docRef.get(source).addOnCompleteListener(newOnCompleteListener<DocumentSnapshot>() {
@OverridepublicvoidonComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
// Document found in the offline cacheDocumentSnapshotdocument= task.getResult();
Log.d(TAG, "Cached document data: " + document.getData());
} else {
Log.d(TAG, "Cached get failed: ", task.getException());
//try again with online version
}
}
});
Solution 2:
I just ran a few tests in an Android app to see how this works.
The code you need is the same, no matter if you're getting data from the cache or from the network:
db.collection("translations").document("rPpciqsXjAzjpComjd5j").get().addOnCompleteListener(newOnCompleteListener<DocumentSnapshot>() {
@OverridepublicvoidonComplete(@NonNull Task<DocumentSnapshot> task) {
DocumentSnapshotsnapshot= task.getResult();
System.out.println("isFromCache: "+snapshot.getMetadata().isFromCache());
}
});
When I'm online this prints:
isFromCache: false
When I go offline, it prints:
isFromCache: true
There is no way to force retrieval from the cache while you're connected to the server.
If instead I use a listener:
db.collection("translations").document("rPpciqsXjAzjpComjd5j").addSnapshotListener(newDocumentListenOptions().includeMetadataChanges(), newEventListener<DocumentSnapshot>() {
@OverridepublicvoidonEvent(DocumentSnapshot snapshot, FirebaseFirestoreException e) {
System.out.println("listen.isFromCache: "+snapshot.getMetadata().isFromCache());
}
}
);
I get two prints when I'm online:
isFromCache: true
isFromCache: false
Solution 3:
You can disable network access and run the query to access data from cache .
For firestore :
https://firebase.google.com/docs/firestore/manage-data/enable-offline#disable_and_enable_network_access
For firebase database call db.goOffline()
and db.goOnline()
Post a Comment for "Cloud Firestore: Retrieving Cached Data Via Direct Get?"