Android - Firebase离线最佳做法

时间:2016-05-29 07:41:32

标签: android firebase firebase-realtime-database

我坚持理解使Firebase应用程序脱机的概念。 根据文档,我们需要致电:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

但我们应该在哪里打电话呢?应该在应用程序的每个活动中使用它吗?因为,当我在我的Application类onCreate()方法中使用它时,我的应用程序不断崩溃。

那么我们应该遵循的最佳做法是让我们的应用离线。<​​/ p>

另一个疑问是上述问题与DatabaseReference.keppSynced(true);

之间的区别

6 个答案:

答案 0 :(得分:14)

创建应用程序类

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

    }
}

并将您的清单更改为

<application
    android:name=".MyApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"

答案 1 :(得分:9)

在检索数据库的第一个引用之前,应在启动时调用

setPersistenceEnabled()一次。我致电FIRApp.configure()

后直接打电话给我

启用持久性允许完全脱机保留信息。这一点的重要组成部分是,即使您强制关闭应用程序并重新打开它,也会完成脱机请求和更新。如果您正在寻找要设置的布尔值的离线访问。

如果您想要在检索信息时缓存最新数据的情况,请使用保持同步,但在下次打开应用时,不一定需要恢复该数据。

一个很好的使用示例是,如果您有访问登录用户详细信息的视图。您可以指定保持该数据库引用同步并且可以更快地获取最新数据,而不是在使用详细信息的所有视图上都有用户详细信息侦听器。

有关持久性和同步的更多详细信息,请参阅Firebase文档: https://firebase.google.com/docs/database/android/offline-capabilities

答案 2 :(得分:2)

取自here

不确定,如果它在这里是相关的。但还有另一种情况可能发生这种崩溃。

如果您的应用程序具有服务(具有不同的进程)并且您正在创建自己的Application类,则该服务和前台应用程序将使用相同的Application类(不是相同的实例)进行初始化。现在,当我使用com.google.firebase:firebase-crash依赖来处理崩溃时,它会创建一个后台服务your.app.packagename:background_crash。由于某种原因,这导致我的应用程序崩溃。具体来说,因为在我的Application类中,我正在进行调用,如

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

我假设,使用我们的Application类启动时的后台服务,不知何故Firebase未初始化。为了解决这个问题,我做了

if (!FirebaseApp.getApps(this).isEmpty())
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

答案 3 :(得分:0)

如果那里的任何iOS开发人员都遇到相同的问题, 然后在return语句之前的函数“ application:didFinishLaunchingWithOptions”中的AppDelegate.swift文件中写入以下行

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

并使用以下行

DatabaseReference.keppSynced(true);

在viewController中包含数据库引用。

答案 4 :(得分:0)

FirebaseDatabase.getInstance()。setPersistenceEnabled(true);

在设置内容视图之后,只需在您的第一个活动或启动器活动的行上方粘贴onCreate方法中即可。 它对我来说很完美。

答案 5 :(得分:0)

创建名为MyAppOFFLINE的Java类 并在清单文件中注册该类

{{1}}