因此,我已经根据自己的意愿初始化了firebase。
mFirebase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebase.getReference("buses");
mBusReference = mDatabaseReference.child(mSelectedBusModel.getRegistrationNo());
mValueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
...
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("Data", "Cancelled");
databaseError.toException().printStackTrace();
}
}
mBusReference.addValueEventListener(mValueEventListener);
我有一个扩展Application的单例,并且在onCreate方法内部启用了Firebase持久性:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
现在,我的问题是,当我离线并重新打开活动时,数据尚未缓存,没有任何负载。我已经阅读了文档,并做了提及的一切,但仍然无法正常工作。
我想做的是使我的应用程序能够缓存从Firebase加载的数据,因此即使关闭并重新打开该应用程序,该数据也始终可用。
请注意,我的控制台中没有显示错误。
答案 0 :(得分:0)
仅使用 setPersistenceEnabled(true)不会削减它。您必须更改您的侦听器,因为您将数据保存在磁盘中,但没有处理它们。您必须使用类似的东西(它取自Firebase documentation,我已将其用于我的应用程序并为我工作)。
---编辑---
如果要保持数据同步,则必须使用ref.keepSynced(true);
。下面的代码是我用来从引用中检索缓存的数据的代码。当我离线时,孩子会正常返回值。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("user");
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, String previousChild) {
System.out.println(snapshot.getValue());
}
});