Firebase Android - 如何判断节点是否已同步

rec*_*rus 5 android firebase

我正在使用Firebase for Android作为我们应用的聊天组件.我无法弄清楚如何在每条聊天消息上可靠地实现状态更新.例如,当聊天与服务器同步时显示"发送...",并在同步后显示成功反馈.

我有一个onChildAdded监听器,它将消息提供给我的适配器.但是,在本地添加每个节点时会立即触发此侦听器,并且我无法检查每个节点的状态

我目前的解决方案是保留一组节点密钥,并在每次向Firebase推送内容时添加密钥.然后在setValue回调中,我从集合中删除节点密钥.但是,这是非常不可靠的,因为当调用活动被破坏等时节点可以同步.

我想知道是否有更简单的方法来检查每个节点是否已同步到服务器?

谢谢!

Fra*_*len 6

Firebase文档中写入数据:

如果您想知道何时提交了数据,可以添加完成侦听器.setValue()和updateChildren()都将获取一个可选的完成侦听器,该侦听器在写入已提交到数据库时调用.

使用这个方便的代码示例:

ref.setValue("I'm writing data", new Firebase.CompletionListener() {
    @Override
    public void onComplete(FirebaseError firebaseError, Firebase firebase) {
        if (firebaseError != null) {
            System.out.println("Data could not be saved. " + firebaseError.getMessage());
        } else {
            System.out.println("Data saved successfully.");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是我目前使用的方法。但是在我没有网络的情况下呢,那么这个监听器根本不会被调用,因为数据在网络打开时排队等待写入。同时,包含此回调的活动将被销毁。然后,我打开网络,这样写就完成了。然后我回到活动。此时数据已同步,但从未触发回调。 (2认同)
  • 在应用程序的同一会话中,侦听器通常仍然存在并被调用。如果您使用磁盘持久性并重新启动应用程序,则侦听器确实无法在重新启动后继续存在。 (2认同)