感谢好奇心!
我不确定在使用addOnCompleteListener
时是否真的有必要调用setPersistence(true)
。
当我使用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
,并且可以离线使用我的应用程序,则仅在能够进行更新时发送更新?
答案 0 :(得分:0)
您看到的是预期的行为。直到对RealtimeDatabase的写入到达服务器并且对其他客户端可见之后,才认为它是“完成”的。在SDK设法同步之前,本地缓存的写入才被认为是完整的。如果您不需要知道服务器最终何时接收到写入,或者是否成功,则无需在其生成的Task中注册侦听器。