首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase脱机同步=>可以使用条件进行同步吗?安卓

Firebase脱机同步=>可以使用条件进行同步吗?安卓
EN

Stack Overflow用户
提问于 2019-03-11 12:42:33
回答 1查看 504关注 0票数 0

我使用的是实时数据库。

我已经设定:"FirebaseDatabase.getInstance().setPersistenceEnabled(true);“

所以很好,当我离线时,所有的数据都被加载,就像我在线一样。

但我有几个问题。

  1. 在我的应用程序中,我有几个人聊天。让我们假设某人在一个组中并且离线。他在聊天中写下了自己想要的内容,当他上网时,信息就会被发送出去。但是,当他离线时,有人把他踢出了小组。我该怎么告诉消防队: 如果(用户仍然属于该组){同步消息}或{不同步消息} 我试着检查用户在他离线时是否仍然属于这个组,但是当它恢复联机时,所有的数据都已经在脱机模式下检查过了,所以数据只是被发送而不需要考虑。
  2. 让我们想象一下我的聊天中有50条信息。当我离线时,我收到5条留言。当我回到网上,它会重新下载这55条消息还是只下载5条附加信息?

我只是想弄清楚我的基本同步是否会花费我很多数据。

编辑

下面是我从聊天中检索数据的方式:

公共无效检索数据(){

代码语言:javascript
复制
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();

代码语言:javascript
复制
    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数据库并制作智能同步适配器?

我敢肯定,消防基地在这方面一定做了些聪明的事情。

EN

回答 1

Stack Overflow用户

发布于 2019-03-11 14:17:46

调用FirebaseDatabase.getInstance().setPersistenceEnabled(true)只会确保最近接收到的数据被缓存在磁盘上。它不支持数据的自动同步。

若要启用节点的自动同步,可以在对该节点的引用上调用keepSynced(true)

当Firebase客户端发现它已经有用于连接侦听器的引用的数据时,它会散列本地数据,并将结果散列发送到服务器。然后,服务器返回更新客户端版本的数据所需的数据。这通常比完整的数据集少得多。

也请看我的答案:How does firebase client know what data to sync?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55102080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档