android - 在 android 中启用离线功能后,我们是否将所有 Firebase 数据作为缓存获取?

标签 android firebase firebase-realtime-database

我对 Firebase android 中的离线功能有疑问。启用 Firebase 离线功能后,

do we get all data of our Firebase app including root data or only logged-in User data as cache?

final FirebaseDatabase database = FirebaseDatabase.getInstance();
        if (database != null) {
            database.setPersistenceEnabled(true);
            database.getReference().keepSynced(true);
        }

我正在使用此代码 fragment 在应用程序类中启用离线功能

最佳答案

在这里,我从 Firebase Support Team 得到了问题的答案

Actually, the main reason, I'm getting all data (including logged-in user data and all other user's data) of my firebase app as cache in my device, because I'm using keepSynced() on root node of my database.

看看下面的代码 fragment ,我用它来启用离线功能:

final FirebaseDatabase database = FirebaseDatabase.getInstance();
    if (database != null) {
        database.setPersistenceEnabled(true);
        database.getReference().keepSynced(true);
    }

在上面的代码 fragment 中,数据库引用是对数据库根节点的引用。

现在,在这个数据库引用中,我使用了 keepSynced() 方法。因此,这会将所有数据作为设备缓存保持同步,这不是一件好事。

理想情况下,我们应该对我们的应用离线工作所必需的那些databaseReferences 使用keepSynced() 方法。

在上面的代码 fragment 中,我又犯了一个错误,那就是我在 Application 类上使用了 setPersistenceEnabled()。我应该将其移动到我的启动器 Activity 类中。

根据我上面的代码 fragment ,setPersistenceEnabled() 每次都会在应用程序首次启动时被调用。这应该在安装应用程序后仅使用一次。

我们可以像下面的代码 fragment 那样调用setPersistanceEnabled(),只调用一次。

@Override
public void onCreate() {
  super.onCreate();
  if (!FirebaseApp.getApps(this).isEmpty()) {
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
  }
}

关于android - 在 android 中启用离线功能后,我们是否将所有 Firebase 数据作为缓存获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993011/

相关文章:

android - ActionBarCompat 与 Theme.AppCompat.Light.DarkActionBar 显示白色标题文本但黑色微调器文本

ios - 处理复杂的 Firebase 数据库查询的 null 返回

android - 无法获得 google-services-4.3.3 - Firebase 实现

javascript - 为什么 Firebase javascript 身份验证不适用于 ie11?

ios - FirebaseStorage 中的图像 url 不存在。, ResponseErrorDomain=com.google.HTTPStatus, ResponseErrorCode=404}?

javascript - 尝试使用 Promise 时出错

java - 如何更改 Android 飞行模式的行为,使其不会关闭蜂窝 radio ?

android - 为什么编译器要求我在适配器类上使用方法 "final"时声明变量 "OnClickListener"?

java - 如何从时间列表中获取最大时间?

android - firebase API 中的 MismatchSenderID 错误