我坚持理解使Firebase应用程序脱机的概念。 根据文档,我们需要致电:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
但我们应该在哪里打电话呢?应该在应用程序的每个活动中使用它吗?因为,当我在我的Application类onCreate()方法中使用它时,我的应用程序不断崩溃。
那么我们应该遵循的最佳做法是让我们的应用离线。</ p>
另一个疑问是上述问题与DatabaseReference.keppSynced(true);
答案 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}}