【发布时间】:2019-04-09 10:36:47
【问题描述】:
我在documentation看到这个:
要使用离线持久性,您无需对 用于访问 Cloud Firestore 数据的代码。有离线 启用持久性,Cloud Firestore 客户端库自动 管理在线和离线数据访问并同步本地数据 当设备重新联机时。
...
对于 Android 和 iOS,默认情况下会启用离线持久性。到 禁用持久性,将
PersistenceEnabled选项设置为false。
在 Android 中,我创建我的 Firestore 引用如下:
final FirebaseFirestore db = FirebaseFirestore.getInstance();
然后,我假设默认情况下启用持久性。
我将尝试用这张图片解释发生了什么:
A
-
我昨天添加了这个文档,并且在设备连接的情况下正常阅读。
-
今天我可以使用设备离线阅读此文档。
B
- 昨天我也添加了这个文件。 设备在此文档存在后在线,但我没有阅读此文档。已添加但从未阅读。
- 今天,设备离线我尝试阅读此文档,但不可行。 (为什么设备在线时没有同步?)
C
昨天我访问了集合6,文档03000503...
没有为整个集合启用持久化?
当我添加文档03030501时,该文档在线时不与设备同步?如果我不阅读文档在线一次,不同步?在这种情况下,不是collection 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();
}
}
});
}
【问题讨论】:
标签: android firebase synchronization google-cloud-firestore