Retrieving data from the server may take some seconds. Is there any way to retrieve cached data in the meantime, using a direct get?
The onComplete
seems to be called only when the data is retrieved from the server:
db.collection("cities").whereEqualTo("state", "CA").get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
...
}
}
});
Is there any callback for the cached data?
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:
When I'm online this prints:
When I go offline, it prints:
There is no way to force retrieval from the cache while you're connected to the server.
If instead I use a listener:
I get two prints when I'm online:
Now it is possible to load data only from cached version. From docs
If it fails, then you can again try for the online version.
Example:
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()
anddb.goOnline()