【问题标题】:java.lang.IllegalStateException: FirebaseApp with name [DEFAULT]java.lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp
【发布时间】:2016-05-20 12:07:54
【问题描述】:

我遇到了这个问题.. 遵循新 firebase sdk 的升级指南...将 google services json 文件保存在 app 目录中.. 仍然与您相同的错误,但对于数据库...

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

【问题讨论】:

标签: android firebase google-play-services


【解决方案1】:

您是否在使用 Firebase 崩溃报告?如果它击中后台进程而不是主进程,您可能会遇到此错误。

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

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

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

【讨论】:

  • 我曾尝试使用此解决方案,但大括号内的代码从未执行过。 Cloud 你给我一个提示让它工作好吗?
  • 太棒了..我得到了这个问题..只有在添加了 firebase 崩溃报告库之后。谢谢@Ian Barber
  • 我没有使用 FirebaseDatabase,只使用 Firebase 崩溃报告。由于我有不同的过程,因此问题与您的描述相似。每次将报告发送回服务器时,我都会静态调用 FirebaseCrash.report。每当我将服务声明为进程时,它就会崩溃。我该如何解决这个问题?
【解决方案2】:

我通过不要在应用程序中放置任何 Firebase 解决了这个错误。我把它放到MainActivity中。例子: MainActivity.java

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

-更新

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

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();

【讨论】:

  • FirebaseDatabase 显示错误,你能帮帮我吗@lee
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 2019-07-09
    • 2016-09-17
    • 2019-12-04
    • 1970-01-01
    • 2020-07-03
    • 2016-12-07
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多