Firebase持久性数据未离线加载

时间:2019-07-12 16:45:57

标签: android firebase firebase-realtime-database

因此,我已经根据自己的意愿初始化了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加载的数据,因此即使关闭并重新打开该应用程序,该数据也始终可用。

请注意,我的控制台中没有显示错误。

1 个答案:

答案 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());
    }

});