gpt4 book ai didi

firebase - setPersistenceEnabled(true) 使应用程序崩溃

转载 作者:行者123 更新时间:2023-12-02 12:15:25 24 4
gpt4 key购买 nike

我正在创建我的第一个 Firebase 应用。它的要求之一是在网络不可用时运行。 Firebase 指南指出:

Enabling disk persistence allows our app to also keep all of its state even after an app restart. We can enable disk persistence with just one line of code. FirebaseDatabase.getInstance().setPersistenceEnabled(true); With disk persistence enabled, our synced data and writes will be persisted to disk across app restarts and our app should work seamlessly in offline situations.

另一个要求是使用 Google 登录。因此,在我的 MainActivity 中,我检查用户是否已登录,如果没有,我启动 SignInActivity。 (SignInActivity 来自 Firebase 示例。)SignInActivity 工作,用户登录,并且再次启动 MainActivity。现在,我的应用程序在代码行 FirebaseDatabase.getInstance().setPersistenceEnabled(true); 上崩溃,并显示以下消息:

Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.

现在,如果我重新启动我的应用程序,用户已登录,SignInActivity 未启动,我的应用程序运行正常。

有关如何在用户登录后避免此崩溃的任何建议?

当我发布此问题时,我收到了重新定位 FirebaseDatabase.getInstance().setPersistenceEnabled(true); 的建议到我的“应用程序类”。我得到了完全相同的结果...SignInActivity 启动、完成,然后我在 setPersistenceEnabled 上崩溃了。

下面是我的 MainActivity onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
// Crash here upon returning from SignInActivity.
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
mFirebaseDbReference = FirebaseDatabase.getInstance().getReference();

// Initialize Firebase Auth
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
// Not signed in, launch the Sign In activity
Timber.tag("MainActivity").i("onCreate(): User not signed in, launching SignInActivity");
startActivity(new Intent(this, SignInActivity.class));
finish();

} else {
mUsername = mFirebaseUser.getDisplayName();
Timber.tag("MainActivity").i("onCreate(): User \"%s\" signed in.", mUsername);
if (mFirebaseUser.getPhotoUrl() != null) {
mPhotoUrl = mFirebaseUser.getPhotoUrl().toString();
}
}

最佳答案

FirebaseApp 由 ContentProvider 初始化,因此在调用 onCreate() 时不会对其进行初始化。

像这样获取您的 FirebaseDatabase:

public class Utils {
private static FirebaseDatabase mDatabase;

public static FirebaseDatabase getDatabase() {
if (mDatabase == null) {
mDatabase = FirebaseDatabase.getInstance();
mDatabase.setPersistenceEnabled(true);
}
return mDatabase;
}

}

然后从您想要的任何事件中调用 Utils.getDatabase()

Read more in this article

关于firebase - setPersistenceEnabled(true) 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com