了解setpresistanceenabled(true)和keepsynced(true)

toiithl6  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(316)

我在stackoverflow上读了很多问题和答案,但是我没有找到100%的单词来回答我的问题。
应用程序示例:我有一个使用firebase实时数据库的android应用程序。我的mainactivity有一个监听器(valueeventlistener)从数据库中获取“商店”。每次打开应用程序时,mainactivity都会运行相同的功能,这样“商店”就可以从数据库中一遍遍地下载。
请告诉我:“setpresistanceenabled(true)”是这样工作的吗->当main活动正在运行,而我的手机上是数据库的缓存,那么“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);
        }
    });
cs7cruho

cs7cruho1#

每次打开应用程序时,mainactivity都会运行相同的功能,这样“商店”就可以从数据库中一遍遍地下载。
使用“addvalueeventlistener()”时,意味着您始终与firebase服务器同步。我们通常说您正在监听实时更新。这也意味着每次数据库中的内容发生更改时,都会调用“ondatachange()”方法,并且您会得到一个datasnapshot对象作为参数,该对象包含您所指向的databasereference中存在的所有数据。即使数据库中只有一个更改,您也将始终获得该节点中的所有数据,包括所有子节点。但是,如果只需要获取一次数据,则应考虑使用addlistenerforsinglevalueevent:
在此位置为数据中的单个更改添加侦听器。
关于:
“setpresistanceenabled(true)”是否以这种方式工作?
您应该知道,使用上述语句时,意味着一旦设备获得网络连接,firebase实时数据库客户端中的任何数据都将同步。因此,所有这些数据都将保留在磁盘上,并在脱机时可用,即使用户或操作系统重新启动应用程序也是如此。这意味着您的应用程序将使用存储在缓存中的本地数据像在线一样工作。
如果“shops”的本地缓存和数据库中的“shops”之间存在差异怎么办?
如前所述,您总是从firebase服务器获取新数据。
我想减少从数据库下载数据。我不需要让应用程序工作时,我的手机的互联网是离线的。我只想减少下载kb。
如果您想减小下载数据的大小,可以考虑将其分成更小的块。这种技术称为分页,它特别用于逐步从服务器下载数据。此外,如果您不需要使用firebase实时数据库的脱机功能,只需使用以下命令禁用此功能:

setPresistanceEnabled(false);

这意味着,如果您脱机,将无法查询您的数据库。

相关问题