当您在 Firebase 上使用 .setPersistenceEnabled(true) 时

我怀疑在addOnCompleteListener使用时是否真的有必要打电话setPersistence(true)。


当我使用addOnCompleteListener时,如果我的互联网处于离线状态,屏幕会继续加载,因为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());

        }

    }

});

所以,正如我所说,如果我的互联网处于离线状态,我无法完成操作,加载屏幕会永远加载(等待完整侦听器)。


我发现,如果没有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,并且可以离线使用我的应用程序,仅在可以时发送更新?


慕田峪9158850
浏览 91回答 1
1回答

德玛西亚99

您所看到的是预期的行为。对 RealtimeDatabase 的写入在到达服务器并对其他客户端可见之前不会被视为“完成”。在 SDK 设法同步之前,本地缓存的写入不被认为是完整的。如果您不需要知道服务器最终何时接收到写入,或者它是否成功,则无需向它生成的 Task 注册侦听器。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java