如标题所述,我使用的是Firebase实时数据库,启用了持久性。
如指南所述,
通过启用持久性,即使用户或操作系统重新启动应用程序,Firebase实时数据库客户端在联机时将同步的任何数据都会保留到磁盘并可脱机使用。这意味着您的应用程序可以像使用存储在缓存中的本地数据一样在线工作。 侦听器回调将继续触发本地更新。
虽然 ValueEventListeners 和每个读取侦听器都会发生这种情况,但我找不到使其与写入操作一起工作的方法。 这是我的数据库助手类的片段:
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
}
});
即使启用了持久性,这应该使数据库以“被动方式”运行,这两个侦听器将不会触发,直到数据库再次联机并最终将更新推送到服务器。 / p>
这并不是我所希望的,因为我预计一旦数据在本地缓存就会触发事件。 我知道我可以简单地忽略这些事件并假装它成功了,但我想知道,我错过了什么吗?有没有办法在缓存数据后立即触发事件?
答案 0 :(得分:2)
当数据写入服务器上的数据库时,将触发写入操作的onSuccess
侦听器。
当数据写入本地队列时,没有事件触发。