setPersistenceEnabled(true) 使应用程序崩溃

2024-02-11

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

启用磁盘持久性允许我们的应用程序即使在应用程序重新启动后也能保留其所有状态。我们只需一行代码即可启用磁盘持久性。FirebaseDatabase.getInstance().setPersistenceEnabled(true);启用磁盘持久性后,我们的同步数据和写入将在应用程序重新启动时保留到磁盘,并且我们的应用程序应该可以在离线情况下无缝运行。

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

必须在使用 FirebaseDatabase 实例之前调用 setPersistenceEnabled()。

现在,如果我重新启动我的应用程序,用户就会登录,SignInActivity未启动,我的应用程序运行良好。

关于用户登录后如何避免此崩溃有什么建议吗?

当我发布这个问题时,我收到了搬迁的建议FirebaseDatabase.getInstance().setPersistenceEnabled(true);到我的“应用程序类”。我得到了完全相同的结果......SignInActivity开始,完成,然后我就崩溃了setPersistenceEnabled.

以下是我的主要活动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()从您想要的任何活动中。

阅读本文的更多内容 https://firebase.googleblog.com/2016/12/how-does-firebase-initialize-on-android.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setPersistenceEnabled(true) 使应用程序崩溃 的相关文章

随机推荐