我在documentation中读过这篇文章:
要使用离线持久性,您无需对 您用于访问Cloud Firestore数据的代码。离线 启用持久性后,Cloud Firestore客户端库会自动 管理在线和离线数据访问并同步本地数据 设备恢复在线状态。
...
对于Android和iOS,默认情况下启用离线持久性。至 禁用持久性,请将
PersistenceEnabled
选项设置为false
。
在Android中,我按如下方式创建我的Firestore参考:
final FirebaseFirestore db = FirebaseFirestore.getInstance();
然后,我假设默认情况下启用了持久性。
我将尝试用这张图片来解释发生了什么:
我昨天添加了此文档,并且在连接了设备的情况下正常阅读了此文档。
今天,我可以使用设备离线来阅读此文档。
昨天我可以访问集合6
,文档03000503
...
未为整个集合启用持久性吗?
当我添加文档03030501
时,此文档在线时是否与设备不同步?如果我一次在线不阅读文档,是否没有同步?在这种情况下,同步不是针对集合6 ?
我需要的是,如果我向集合6添加一个文档,则设备可以在在线时同步该文档,而不必输入该新文档。这可能吗?
以下是阅读文档的代码:
public void launchFirestore() {
final FirebaseFirestore db = FirebaseFirestore.getInstance();
String fechaDD = strFechaHoy.substring(6, 8);
String fechaMM = strFechaHoy.substring(4, 6);
String fechaYYYY = strFechaHoy.substring(0, 4);
DocumentReference calRef = db.collection(CALENDAR_PATH).document(fechaYYYY).collection(fechaMM).document(fechaDD);
calRef.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot calSnapshot,
@Nullable FirebaseFirestoreException e) {
DocumentReference dataRef=calSnapshot.getDocumentReference(VISPERAS_ID);
if (e != null || dataRef==null) {
launchVolley();
return;
}
if (calSnapshot != null && calSnapshot.exists()) {
dataRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot dataSnapshot) {
//Log.d(TAG,"---"+dataSnapshot.toString());
mBreviario = dataSnapshot.toObject(Breviario.class);
showData();
}
});
} else {
launchVolley();
}
}
});
}
答案 0 :(得分:1)
Firebase不会不自动在设备上缓存数据库中的所有数据。其磁盘持久性仅将客户端已经在其本地数据库中请求的数据存储。
在您链接的同一文档页面上:
此功能会缓存您的应用程序正在使用的Cloud Firestore数据副本 ,因此您的应用程序可以在设备离线时访问数据。
如果考虑到这一点,这是有道理的:如果Firebase同步用户可能看到的所有数据,则它可能必须同步整个数据库。在移动设备上这是不合理的。
如果您希望离线获取特定数据,请确保在设备仍处于在线状态时将观察值附加到该数据上。