Android的Firebase数据库 - 使用持久性在脱机时编写事件

问题描述:

正如标题所述,我使用的是Firebase实时数据库,并启用了持久性Android的Firebase数据库 - 使用持久性在脱机时编写事件

由于指南中指出,

通过启用持久性,任何数据,虽然网上一直持续到磁盘,可脱机使用的火力地堡实时数据库客户端会同步,即使用户或操作系统重新启动应用程序。这意味着您的应用可以像使用存储在缓存中的本地数据在线一样工作。 听众回调将继续触发本地更新

虽然出现这种情况与ValueEventListeners和每次读的听众,我不能找到一种方法,使其与写入操作正常工作。 这是从我的数据库辅助类的代码段:

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

即使启用持久性,应使数据库的行为的“反应性时尚”,这两个监听器将不会触发,直到该数据库上线再次并最终将更新推送到服务器。

这实际上并不是我所希望的,因为我希望在数据缓存到本地时触发事件。 我知道我可以简单地忽略事件并假装成功,但我想知道,我错过了什么吗?一旦数据被缓存,是否有办法触发事件?

当数据写入服务器上的数据库时,触发写操作的onSuccess侦听器。

当数据写入本地队列时,没有触发事件。

+0

好吧,看起来我不得不假装它成功了!除了忽略结果之外,有没有可以使用的解决方法?我在添加侦听器之前尝试检查连接状态,但是如果在连接它们之后我失去了连接(并且连接侦听器需要一段时间来更新状态),它将像以前一样运行,等待连接恢复。 。我无法找到一种方法来删除这些听众。 –

+0

我不知道[你想要完成什么]((http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),这就是为什么我回答系统如何行为方式。 –