我使用的是实时数据库。
我已经设定:"FirebaseDatabase.getInstance().setPersistenceEnabled(true);“
所以很好,当我离线时,所有的数据都被加载,就像我在线一样。
但我有几个问题。
我只是想弄清楚我的基本同步是否会花费我很多数据。
编辑
下面是我从聊天中检索数据的方式:
公共无效检索数据(){
UserMessageRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) /**** HERE IS THE PROBLEM***/
{
if (dataSnapshot.exists()) {
DisplayMessages(dataSnapshot);
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
//Nothings
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
//Nothings
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { //Nothings
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
//Nothings
}
});}//函数来检索消息
DisplayMessages(DataSnapshot dataSnapshot) { Iterator迭代器= dataSnapshot.getChildren().iterator();
String chatImage = (String) ((DataSnapshot) iterator.next()).getValue();
String chatMessage = (String) ((DataSnapshot) iterator.next()).getValue();
String nID = (String) ((DataSnapshot) iterator.next()).getValue();
String chatTime = (String) ((DataSnapshot) iterator.next()).getValue().toString();
ListOfChats.add(new ChatClass(nID, chatMessage, chatTime, chatImage));
adapter.notifyDataSetChanged();}现在是问题所在。
如果我离线并进入聊天,这些消息只是从磁盘中检索,ok工作正常。
但是如果我上网,我得到了两条新消息:而不是为2条新闻消息调用onChildAdded,而是下载所有的消息,然后用旧的子消息和2新闻的子消息调用onChildAdded。我想要的是,这2条新闻信息被添加到我手机中的本地json文件中,而不是每次我打开保护程序的时候都下载。
因此,有了一个大约30 MB的防火墙数据库,我每天下载5-10 MB,即使我每天在其中添加2KB .(这是为大学项目准备的,所以我们现在有两个用户)
因此,是否有解决方案(firebase只需将json文件更新到本地数据库而不下载任何内容),还是必须自己创建SQL数据库并制作智能同步适配器?
我敢肯定,消防基地在这方面一定做了些聪明的事情。
发布于 2019-03-11 14:17:46
调用FirebaseDatabase.getInstance().setPersistenceEnabled(true)只会确保最近接收到的数据被缓存在磁盘上。它不支持数据的自动同步。
若要启用节点的自动同步,可以在对该节点的引用上调用keepSynced(true)。
当Firebase客户端发现它已经有用于连接侦听器的引用的数据时,它会散列本地数据,并将结果散列发送到服务器。然后,服务器返回更新客户端版本的数据所需的数据。这通常比完整的数据集少得多。
https://stackoverflow.com/questions/55102080
复制相似问题