Java 了解setPresistanceEnabled(真)和keepSynced(真)
我在StackOverflow上读了很多问题和答案,但我没有找到100%的单词来回答我的问题 应用程序示例: 我有一个使用Firebase实时数据库的Android应用程序。My MainActivity有一个监听器(ValueEventListener),用于从数据库中获取“商店”。每次我打开我的应用程序时,MainActivity都会运行相同的功能,因此“商店”会从数据库中反复下载 请告诉我: “setPresistanceEnabled(true)是否以这种方式工作->当MainActivity正在运行并且在我的手机上是数据库的缓存时,那么“shops”是否正在从数据库下载?(如果“shops”的本地缓存与数据库中的“shops”存在差异怎么办?) 我的目标: 我想减少从数据库下载数据。 当我的手机上网离线时,我不需要让应用程序工作。我只想减少下载kb 我的代码示例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
// 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);
这意味着,如果您处于脱机状态,将无法查询您的数据库