当前位置: 首页 > 知识库问答 >
问题:

setPersistenceEnabled(true)崩溃应用程序

阙佐
2023-03-14

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

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

另一个要求是使用谷歌登录。因此,在我的main活动中检查用户是否已登录,如果未登录,则启动signianctivity。(显著性来自Firebase示例。)SignInActivity工作,用户登录,main活动第二次启动。现在,我的应用程序在代码行FirebaseDatabase上崩溃。getInstance()。setPersistenceEnabled(true) 显示以下消息:

必须在Firebase数据库实例的任何其他用法之前调用setPeristextEnable()。

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

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

在我发布这个问题时,我收到了重新定位FirebaseDatabase的建议。getInstance()。setPersistenceEnabled(true) 到我的“应用程序类”。我得到了完全相同的结果…signianctivity启动、完成,然后在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();
        }
    } 

共有3个答案

柯奕
2023-03-14

我面临着一个类似的问题,使用静态变量似乎可以解决这个问题。所以一开始我的代码是这样的

@Override
protected void onCreate(Bundle savedInstanceState) {
    //..code

    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    FirebaseDatabase database = FirebaseDatabase.getInstance();

    //..code
}

现在看起来更像

static boolean calledAlready = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    //..code

    if (!calledAlready)
    {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        calledAlready = true;
    }

    FirebaseDatabase database = FirebaseDatabase.getInstance();

    //..code
}

希望有帮助!

高寒
2023-03-14

我通过在我的应用程序类中使用setPersistenceEnabled(true)修复了此异常。

public class MApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    }
}

在AndroidManifest中。xml,将应用程序名称设置为MapApplication:

<application
    android:name=".MApplication"
    ... />
全兴运
2023-03-14

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。从您想要的任何活动获取数据库()。

请阅读本文中的更多内容

 类似资料:
  • 当我运行应用程序并转到用户的活动时,应用程序崩溃,显示mUsersList。setHasFixedSize(真);正在使应用程序崩溃。 这是消息“由以下原因引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void androidx.recyclerview.widget.recyclerview.setHasFixedSize(布尔)'”

  • 我的android项目有个问题。每当我将minifyEnabled设置为true时,应用程序就会崩溃。应用程序正在firebase后端上运行。 下面是我在android studio中运行的日志 下面是我的身材 这是我的主要活动 下面是我的家庭片段 有人能帮我解决这个问题吗,为什么会出现这个错误。提前感谢!!还有新年快乐 附言:我是个新手

  • 问题内容: 当我尝试访问Flask应用程序时,该应用程序崩溃了。 这类似于this或this。但是,我的设置似乎正确。 flask.cli.NoAppException:提供的文件/路径(服务器)似乎不存在。请确认路径正确。如果应用不在PYTHONPATH上,请确保扩展名为.py 我的环境变量设置正确。 我的服务器文件是y目录中没有任何文件。 我不记得对代码进行任何特殊更改。该错误可能来自哪里?

  • 在以前的代码上,谁医生帮了我 现在,android应用程序在我的手机上运行时崩溃了,这是错误日志 第一个问题是在我用相机扫描二维码后,它不能显示在二维码的结果进入 第二个问题是,我从存储器中选择了一个QRcode图像,然后点击确认,它崩溃了 下面是我认为的问题 类型不匹配:推断的类型是Uri?但乌里是意料之中的 冗余SAM构造函数 'onRequestPermissionsResult(Int,数

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩