java.lang.IllegalStateException:名为[DEFAULT]的FirebaseApp

时间:2016-05-20 12:07:54

标签: android firebase google-play-services

我一直在遇到这个问题..按照新firebase sdk的升级指南...在app目录中保存了google服务json文件..仍然和你一样错误,但数据库...

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

3 个答案:

答案 0 :(得分:32)

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

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

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

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

答案 1 :(得分:4)

我通过不在应用程序中放置任何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 database = DatabaseHelper.getInstance();

答案 2 :(得分:0)

扩展@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
}