检测Firebase中的本地数据更新

时间:2016-01-01 07:57:52

标签: firebase

当我的用户在我的Android应用中离线时调用setValue时,Firebase会提供本地商店对我的侦听器所做更改的快照,即使更改尚未提交给服务器。我了解Firebase将在恢复连接时努力与服务器同步,但如果应用重新启动,则该更改将永久丢失。

我已经为我的所有数据准备了一个自定义本地存储,我希望自己可以跟踪未提交的更改,当我从成功的setValue服务器收到回复时清除脏位。但如果本地商店假装提交日期,那似乎不可能。

我认为我不想使用磁盘持久性(因为我已经拥有自己的磁盘持久性)。有没有办法告诉更新何时来自本地存储与真实服务器提交?或者我应该使用完成监听器来清除脏位?

1 个答案:

答案 0 :(得分:2)

  

我了解Firebase将在恢复连接时努力与服务器同步,但如果应用重新启动,则该更改将永久丢失。

默认行为确实是挂起的写入保留在内存中。但是,您可以通过enabling disk persistence轻松更改它。

Firebase.getDefaultConfig().setPersistenceEnabled(true);

但是,既然您表示不想使用它,那么另一种方法是使用CompletionListener来检测Firebase服务器上的更改何时提交:

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

请注意,完成侦听器不会持久保存到磁盘。因此,即使您启用了持久性,在应用程序重新启动后执行挂起写入时,完成回调将触发。因此,请勿尝试混合磁盘持久性或完成侦听器。