[英]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.