Firebase 离线同步 => 我可以使用条件进行同步吗?人造人



我使用firebase实时数据库。

我已经设置了:" firebaseadatabase.getInstance()。setPersistenceEnabled(true);"

很好,完美,当我离线时,所有数据都像我在线一样加载。

但是我有几个问题。

  1. 在我的应用程序中,我与很少的人进行了聊天小组。假设有人在一个小组中并且离线。他在聊天中写下了他想要的内容,当他将在网上上网时会发送消息。但是,当他离线时,有人将他踢出了小组。我如何告诉firebase:

    if (the user still belongs to the group)
    {
        sync messages
    }
    else
    {
        don't sync messages
    }
    

    我试图检查用户在离线时是否仍然属于该组,但是当它返回在线时,所有内容已经以离线模式检查了所有内容,因此数据只是在不重新计算的情况下发送。

  2. 让我们想象我在聊天中有50条消息。当我离线时,我会收到5条消息。当我返回在线时,它会重载55条消息还是仅仅是5个附加消息?

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

编辑

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

public void检索(){

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
    }
});

}//功能检索消息

private void displayMessages(datasNapShot datasNapShot){iterator 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();

}现在是问题。

如果我脱机并进入聊天,则刚从磁盘中检索消息,好的。

但是,如果我上网并收到了2条新消息:它没有致电2个新闻消息,而是下载了所有消息,然后致电"老孩子"one_answers" 2个新闻孩子"。我想要的是,这2条新闻被添加到手机中的本地JSON文件中,并且每次打开保护时都不会下载所有内容。

因此,使用大约30kb的firebase数据库,即使我每天添加2kb,我每天都会下载5-10 MB ...(这是为了大学项目,所以我们现在就像2个用户)

因此,是否有解决方案(firebase只需将JSON文件更新到本地数据库中,而无需下载eveything),或者我必须自己执行我自己的SQL数据库并制作一个智能同步适配器?

我确定Firebase必须对此做一些聪明的事情。

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

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

当firebase客户端找到它已经具有用于将侦听器连接到的参考的数据时,它会散布本地数据并将结果哈希发送到服务器。然后,服务器还会寄回更新客户端版本所需的数据。这通常比完整数据集要少得多。

还在这里查看我的答案:Firebase客户如何知道要同步的数据?

最新更新