Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firestore持久性到底是如何工作的?_Android_Firebase_Synchronization_Google Cloud Firestore - Fatal编程技术网

Android Firestore持久性到底是如何工作的?

Android Firestore持久性到底是如何工作的?,android,firebase,synchronization,google-cloud-firestore,Android,Firebase,Synchronization,Google Cloud Firestore,我在报纸上读到: 要使用脱机持久性,不需要对 用于访问云Firestore数据的代码。离线 启用持久性后,云Firestore客户端库将自动 管理联机和脱机数据访问并同步本地数据 当设备重新联机时 对于Android和iOS,默认情况下启用脱机持久性。到 禁用持久性,将PersistenceEnabled选项设置为false 在Android中,我创建Firestore引用如下: final FirebaseFirestore db = FirebaseFirestore.getInstanc

我在报纸上读到:

要使用脱机持久性,不需要对 用于访问云Firestore数据的代码。离线 启用持久性后,云Firestore客户端库将自动 管理联机和脱机数据访问并同步本地数据 当设备重新联机时

对于Android和iOS,默认情况下启用脱机持久性。到 禁用持久性,将
PersistenceEnabled
选项设置为
false

在Android中,我创建Firestore引用如下:

final FirebaseFirestore db = FirebaseFirestore.getInstance();
然后,我假设默认情况下启用了持久性

我将试着用这幅图来解释发生了什么:

A.
  • 我昨天添加了此文档,并在连接了设备的情况下正常阅读了此文档

  • 今天,我可以使用设备离线阅读本文档

B
  • 昨天我也添加了这个文档。此文档存在后,设备已联机,但我没有阅读此文档。它被添加了,但从未读过
  • 今天,在设备离线的情况下我尝试阅读此文档,但不可能。(为什么在设备联机期间未同步?)
C 昨天我访问了收藏
6
,文档
03000503

未为整个集合启用持久性

当我添加文档
03030501
时,该文档在线时是否与设备不同步?如果我没有在线阅读文档一次,是否没有同步?在这种情况下,并非对集合6中的所有文档进行同步

如果我在collection 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();
            }
        }
    });
}
public void launchFirestore(){
final FirebaseFirestore db=FirebaseFirestore.getInstance();
字符串fechaDD=strFechaHoy.substring(6,8);
字符串fechaMM=strFechaHoy.substring(4,6);
字符串fechayyy=strFechaHoy.substring(0,4);
DocumentReference calRef=db.collection(日历路径)。document(fechayyy)。collection(fechaMM)。document(fechaDD);
calRef.addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(@Nullable DocumentSnapshot calSnapshot,
@可为空的FireBaseFireStore异常(e){
DocumentReference dataRef=calSnapshot.getDocumentReference(VISPERAS\u ID);
如果(e!=null | | dataRef==null){
发射截击();
返回;
}
如果(calSnapshot!=null&&calSnapshot.exists()){
dataRef.get().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(DocumentSnapshot dataSnapshot){
//Log.d(标记“---”+dataSnapshot.toString());
mbrevario=dataSnapshot.toObject(Breviario.class);
showData();
}
});
}否则{
发射截击();
}
}
});
}

Firebase不会自动在设备上缓存数据库中的所有数据。它的磁盘持久性只在其本地数据库中存储客户端已经请求的数据

从链接的同一文档页面:

此功能缓存应用程序正在使用的云Firestore数据的副本,以便应用程序可以在设备脱机时访问数据

仔细想想,这是有道理的:如果Firebase将同步用户可能看到的所有数据,那么它可能必须同步整个数据库。这在移动设备上是不合理的


如果您希望特定数据可以脱机使用,请确保在设备仍联机时将“观察”附加到该数据。

感谢您的回复,现在更方便了。正如您所说,如果您希望特定数据可以脱机使用,请确保在设备仍处于联机状态时对该数据附加观察。我只需要将所有内容放入我的
lh
收藏。我怎么能做到?如果您想要一个完全脱机复制的数据库,您可能需要考虑其他选项。是的,将来的想法是在应用程序中创建SQLite数据库,但暂时我需要一种简单的方法来提供脱机数据的一部分,然后我想在FialBasic中。它不全是我的数据库,而只是集合
lh
中的内容。