繁体   English   中英

在Firebase上使用.setPersistenceEnabled(true)时,真的需要.addOnCompleteListener吗?

[英]It's really necessary .addOnCompleteListener when you're using .setPersistenceEnabled(true) on Firebase?

感谢您的好奇心!

addOnCompleteListener在使用setPersistence(true)时是否真的有必要调用addOnCompleteListener

当我使用addOnCompleteListener ,如果我的Internet处于脱机状态,则屏幕将继续加载,因为addOnCompleteListener将永远不会结束-等待连接。 因此,我无法离线添加任何内容,因为加载屏幕正在等待连接(破坏了持久性的概念)。

以下示例显示了我在说什么:

getDatabaseReference()
        .child("Example")
        .child(userID)
        .push()
        .setValue(dataExample)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()){
            //interface call with success response
            interface.onSuccess();
        }else {
            //interface call with failure response
            interface.onFailure(task.getException().getMessage());
        }
    }
});

因此,正如我所说,如果我的Internet处于离线状态,我将无法完成操作,因此加载屏幕会永远加载(等待completelistener)。

我发现,没有addOnCompleteListener ,我可以在脱机时添加和删除值,因为它们在缓存中,所以当我有互联网时,该应用程序会将更新在线发送到数据库中-很棒。

下面的示例显示了我的建议:

 getDatabaseReference()
        .child("Example")
        .child(userID)
        .push()
        .setValue(dataExample);

 //interface call with successful response without handling error (because it won't happen)
 interface.onSuccess();

所以,我的问题是,这样做正确吗? 这是一个好习惯吗? 如果没有addOnCompleteListener ,并且可以脱机使用我的应用程序,则仅在有能力时发送更新?

您所看到的是预期的行为。 直到对RealtimeDatabase的写入到达服务器并且对其他客户端可见之后,才认为它是“完成”的。 在SDK设法同步之前,本地缓存的写入才被认为是完整的。 如果您不需要知道服务器最终何时接收到写操作或写操作是否成功,则无需在其生成的Task中注册侦听器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM