【问题标题】:Firebase database for Android - write events when offline, using persistence适用于 Android 的 Firebase 数据库 - 离线时使用持久性写入事件
【发布时间】:2018-02-11 08:33:51
【问题描述】:

如标题所述,我使用的是 Firebase 实时数据库,启用了持久性

如指南所述,

通过启用持久性,Firebase 实时数据库客户端在联机时将同步的任何数据都会持久保存到磁盘并且可以脱机使用,即使用户或操作系统重新启动应用程序也是如此。这意味着您的应用程序可以使用存储在缓存中的本地数据像在线一样工作。 侦听器回调将继续触发本地更新

虽然 ValueEventListeners 和每个读取侦听器都会发生这种情况,但我无法找到一种方法使其也适用于写入操作。 这是我的数据库助手类中的一个 sn-p:

    DatabaseReference userRef = root.child("users").child(user.getUid());
    userRef.setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void result) {
            //handle success event
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            //handle failure event
        }
    });

即使启用了持久性,这也应该使数据库以“反应方式”运行,这两个侦听器不会触发,直到数据库再次联机并最终将更新推送到服务器。

这并不是我真正希望的,因为我预计一旦数据在本地缓存后就会触发事件。 我知道我可以简单地忽略这些事件并假装它成功了,但我想知道,我错过了什么吗?有没有办法在数据缓存后立即触发事件?

【问题讨论】:

    标签: android firebase firebase-realtime-database persistence offline


    【解决方案1】:

    写入操作的onSuccess 监听器在数据写入服务器上的数据库时触发。

    当数据写入本地队列时,不会触发任何事件。

    【讨论】:

    • 好吧,看来我得假装成功了!除了忽略结果之外,我可以使用任何解决方法吗?我尝试在添加侦听器之前检查连接状态,但是如果我在附加它们之后失去连接(并且连接侦听器需要一段时间来更新状态),它的行为将与以前相同,等待连接恢复。 . 我也找不到删除这些听众的方法。
    • 我不确定[您要完成什么]((meta.stackexchange.com/questions/66377/what-is-the-xy-problem),这就是我回答系统行为方式的原因。
    • @FrankvanPuffelen 我有同样的问题。我正在显示一个对话框片段,该片段需要 OnSuccess 或 OnFailure 的响应才能关闭。但是正如你所说,当我们离线写入时没有回调,那么我们必须关闭对话框而不等待响应并假装写入成功
    • 如果用户离线,你希望发生什么?如果您希望它们被重定向,它有助于意识到当userRef.setValue(user) 调用完成时,本地应用程序已处理写入。你不需要一个成功的监听器。
    猜你喜欢
    • 2020-05-31
    • 2017-10-08
    • 2019-11-22
    • 1970-01-01
    • 2017-03-27
    • 2017-04-05
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多