Подтвердить что ты не робот

Java.lang.IllegalStateException: FirebaseApp с именем [DEFAULT]

Я получаю эту проблему.. последовали руководство по обновлению для нового firebase sdk... сохранили json файл google services в каталоге приложения.. по-прежнему та же ошибка, что и вы, но для базы данных...

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

Ответ 1

Вы используете Firebase Crash Reporting? Возможно, вы попали в эту ошибку из-за этого, если он попал в фоновый процесс, а не в основной.

Crash Reporting создает второй процесс (background_crash) для отправки сбоев. К сожалению, все процессы в Android-приложении имеют общий подкласс Application, поэтому ваш метод onCreate запускается также в фоновом режиме. Это пытается инициализировать базу данных, которая терпит неудачу.

Исправление состоит в том, чтобы убедиться, что вызов базы данных выполняется только тогда, когда Firebase настроена правильно (что будет в основном процессе). Вы можете проверить следующее:

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

Ответ 2

Я решил эту ошибку, не помещая ничего из Firebase в Application. Я включил его в 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();

Ответ 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
}