首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Firebase中检测本地数据更新

在Firebase中检测本地数据更新
EN

Stack Overflow用户
提问于 2016-01-01 07:57:51
回答 1查看 1.4K关注 0票数 2

当我的用户在我的安卓应用程序离线时调用setValue时,Firebase从本地商店向我的侦听器提供了更改的快照,尽管该更改尚未提交给服务器。我知道Firebase将在恢复连接时努力与服务器同步,但是如果应用程序重新启动,更改将永远丢失。

我已经为我的所有数据建立了一个定制的本地存储库,我希望自己能够跟踪未提交的更改,当我从一个成功的setValue服务器那里得到回复时,会清除一些脏的信息。但是,如果当地商店假装日期已经确定,那就不可能了。

我不想使用磁盘持久化(因为我已经有了自己的)。是否有一种方法可以判断更新是从本地商店还是从真正的服务器提交?或者我应该用一个完成监听器来清除脏的部分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-01 16:44:06

我知道Firebase将在恢复连接时努力与服务器同步,但是如果应用程序重新启动,更改将永远丢失。

默认行为实际上是将挂起的写操作保存在内存中。不过,您可以通过启用磁盘持久性轻松地更改它。

代码语言:javascript
复制
Firebase.getDefaultConfig().setPersistenceEnabled(true);

但是,既然您表示不想使用该更改,则可以使用CompletionListener来检测何时将更改提交到Firebase服务器上的数据库:

代码语言:javascript
复制
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持久性,在应用程序重新启动后完成挂起的写操作时,完成回调也不会触发。因此,不要尝试混合磁盘持久性或完成侦听器。

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

https://stackoverflow.com/questions/34554511

复制
相关文章

相似问题

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