当我的用户在我的安卓应用程序离线时调用setValue时,Firebase从本地商店向我的侦听器提供了更改的快照,尽管该更改尚未提交给服务器。我知道Firebase将在恢复连接时努力与服务器同步,但是如果应用程序重新启动,更改将永远丢失。
我已经为我的所有数据建立了一个定制的本地存储库,我希望自己能够跟踪未提交的更改,当我从一个成功的setValue服务器那里得到回复时,会清除一些脏的信息。但是,如果当地商店假装日期已经确定,那就不可能了。
我不想使用磁盘持久化(因为我已经有了自己的)。是否有一种方法可以判断更新是从本地商店还是从真正的服务器提交?或者我应该用一个完成监听器来清除脏的部分?
发布于 2016-01-01 16:44:06
我知道Firebase将在恢复连接时努力与服务器同步,但是如果应用程序重新启动,更改将永远丢失。
默认行为实际上是将挂起的写操作保存在内存中。不过,您可以通过启用磁盘持久性轻松地更改它。
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.");
}
}
});注意,完成监听器不会持久化到磁盘。因此,即使启用dis持久性,在应用程序重新启动后完成挂起的写操作时,完成回调也不会触发。因此,不要尝试混合磁盘持久性或完成侦听器。
https://stackoverflow.com/questions/34554511
复制相似问题