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

Android Firebase数据库-脱机时使用持久性写入事件,android,firebase,firebase-realtime-database,persistence,offline,Android,Firebase,Firebase Realtime Database,Persistence,Offline,如标题所述,我使用的是Firebase实时数据库,启用了持久性 如指南所述 通过启用持久性,Firebase实时数据库客户端在联机时将同步的任何数据都会持久化到磁盘,并且即使在用户或操作系统重新启动应用程序时,也可以脱机使用。这意味着您的应用程序可以使用缓存中存储的本地数据在线工作侦听器回调将继续触发本地更新 虽然ValueEventListeners和每个读侦听器都会发生这种情况,但我找不到一种方法使其也能用于写操作。 这是my database helper类的一个片段: Datab

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

如指南所述

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

虽然ValueEventListeners和每个读侦听器都会发生这种情况,但我找不到一种方法使其也能用于写操作。 这是my database helper类的一个片段:

    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
        }
    });
DatabaseReference userRef=root.child(“用户”).child(user.getUid());
userRef.setValue(user.addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公开作废(作废结果){
//处理成功事件
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
//处理故障事件
}
});
即使启用了持久性,也会使数据库以“反应式方式”运行,这两个侦听器将不会启动,直到数据库再次联机并最终将更新推送到服务器

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

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


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

好吧,看来我不得不假装它成功了!除了忽略结果之外,我还有什么办法可以使用吗?我尝试在添加侦听器之前检查连接状态,但是如果在连接它们之后丢失连接(并且连接侦听器需要一段时间来更新状态),它的行为将与之前相同,等待连接返回。。。我也找不到删除这些侦听器的方法。我不确定[您试图实现的目标](),这就是我回答系统行为的原因。@FrankvanPuffelen我也有同样的问题。我正在显示一个对话框片段,它需要OnSuccess或OnFailure的响应才能关闭。但是正如您所说,当我们脱机写入时没有回调,那么我们必须在不等待响应的情况下关闭对话框,并假装写入成功。您怎么办如果用户处于脱机状态,是否希望发生这种情况?如果您希望将其重定向,这有助于了解当
userRef.setValue(user)
调用完成时,本地应用程序已处理写入操作。您不需要成功侦听器。