Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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
Java 了解setPresistanceEnabled(真)和keepSynced(真)_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 了解setPresistanceEnabled(真)和keepSynced(真)

Java 了解setPresistanceEnabled(真)和keepSynced(真),java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我在StackOverflow上读了很多问题和答案,但我没有找到100%的单词来回答我的问题 应用程序示例: 我有一个使用Firebase实时数据库的Android应用程序。My MainActivity有一个监听器(ValueEventListener),用于从数据库中获取“商店”。每次我打开我的应用程序时,MainActivity都会运行相同的功能,因此“商店”会从数据库中反复下载 请告诉我: “setPresistanceEnabled(true)是否以这种方式工作->当MainActiv

我在StackOverflow上读了很多问题和答案,但我没有找到100%的单词来回答我的问题

应用程序示例: 我有一个使用Firebase实时数据库的Android应用程序。My MainActivity有一个监听器(ValueEventListener),用于从数据库中获取“商店”。每次我打开我的应用程序时,MainActivity都会运行相同的功能,因此“商店”会从数据库中反复下载

请告诉我: “setPresistanceEnabled(true)是否以这种方式工作->当MainActivity正在运行并且在我的手机上是数据库的缓存时,那么“shops”是否正在从数据库下载?(如果“shops”的本地缓存与数据库中的“shops”存在差异怎么办?)

我的目标: 我想减少从数据库下载数据。 当我的手机上网离线时,我不需要让应用程序工作。我只想减少下载kb

我的代码示例

// STORE ALL SHOPS IN TEMP ARRAY LIST
    DatabaseReference db_shops = FirebaseDatabase.getInstance().getReference();
    db_shops.child("shops").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot allshopsSnapshot) {

            shopsList.clear();

            for (DataSnapshot uid_shop : allshopsSnapshot.getChildren()) {
                Shop shop = new Shop();
                shop.setUid(String.valueOf(uid_shop.getKey()));
                shop.setCategory((String.valueOf(uid_shop.child("category").getValue())));
                shop.setCheckLocation((String.valueOf(uid_shop.child("checkLocation").getValue())));
                shop.setCode((String.valueOf(uid_shop.child("code").getValue())));
                shopsList.add(shop);
            }
        }


        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            setContentView(R.layout.activity_appnotloaded);
        }
    });
每次我打开我的应用程序时,MainActivity都会运行相同的功能,因此“商店”会从数据库中反复下载

当使用“addValueEventListener()”时,这意味着您始终与Firebase服务器同步。我们通常说您正在侦听实时更新。这也意味着每当数据库中发生更改时,“onDataChange()方法,您将获得一个DataSnapshot对象作为参数,该对象包含您所指向的DatabaseReference中存在的所有数据。即使数据库中只有一个更改,您也将始终获得该节点中的所有数据,包括所有子节点。但是,如果需要只获得一次数据,就应该考虑使用:

在此位置为数据中的单个更改添加侦听器

关于:

“setPresistanceEnabled(true)”是否以这种方式工作

您应该知道,当使用上述语句时,这意味着一旦设备获得网络连接,Firebase实时数据库客户端中的任何数据都将同步。因此,即使用户或操作系统重新启动应用程序,所有这些数据都将保留在磁盘上,并在脱机时可用。这意味着,通过使用缓存中存储的本地数据,您的应用程序将像在线一样工作

如果数据库中的“商店”和“商店”的本地缓存之间存在差异,该怎么办

如前所述,您总是从Firebase服务器获取新数据

我想减少从数据库下载数据。我不需要让应用程序在我手机的互联网离线时工作。我只是想减少下载kb

如果要减少下载数据的大小,可以考虑以较小的块获取数据。这种技术称为分页,尤其用于逐步从服务器下载数据。此外,如果您不需要使用Firebase实时数据库的脱机功能,只需使用以下命令禁用此功能:

setPresistanceEnabled(false);
这意味着,如果您处于脱机状态,将无法查询您的数据库