java.lang.IllegalStateException:名为的FirebaseApp

我一直在收到这个问题..按照新firebase sdk的升级指南…保存了应用程序目录中的google服务json文件..仍然和你一样但是对于数据库…

Caused by: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 

您使用的是Firebase崩溃报告吗? 如果它遇到后台进程而不是主进程,你可能会遇到这个错误。

崩溃报告创建第二个进程( background_crash )以发送崩溃。 不幸的是,Android应用程序中的所有进程共享一个公共的Application子类,因此您的onCreate方法也在后台进程中运行。 这会尝试初始化数据库,但失败了。

修复方法是确保仅在正确配置Firebase时运行数据库调用(这将在主进程中)。 你可以这样检查:

 @Override public void onCreate() { super.onCreate(); if (!FirebaseApp.getApps(this).isEmpty()) { FirebaseDatabase.getInstance().setPersistenceEnabled(true); } } 

我解决了这个错误,不要在应用程序中放入任何Firebase。 我把它放在MainActivity中。 示例:MainActivity.java

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FirebaseDatabase.getInstance().setPersistenceEnabled(true); ... } 

-UPDATE

其他解决方案是创建一个DatabaseHelper类,其中包含一个FirebaseDatabase实例。

 public class DatabaseHelper { private static boolean persistenceEnable = false; private static FirebaseDatabase mDatabase; public static boolean isPersistenceEnable(){ return persistenceEnable; } public static FirebaseDatabase getInstance() { if (mDatabase == null) { mDatabase = FirebaseDatabase.getInstance(); if(persistenceEnable==true) { mDatabase.setPersistenceEnabled(true); } } return mDatabase; } } 

和使用:FirebaseDatabase数据库= DatabaseHelper.getInstance();

扩展@Ian Barber的解决方案,您可以尝试此通用检查以跳过处理所有非主要进程的自定义Application.onCreate。 如果其他进程不属于您,则您不希望运行任何自定义。

 @Override public void onCreate() { super.onCreate(); if (FirebaseApp.getApps(this).isEmpty()) { // No firebase apps; we are in a non-main process // skip custom Application.onCreate return; } // Firebase init only in the main process FirebaseDatabase.getInstance().setPersistenceEnabled(true); // other code }