Java.lang.IllegalStateException: FirebaseApp с именем [DEFAULT]
Я получаю эту проблему.. последовали руководство по обновлению для нового firebase sdk... сохранили json файл google services в каталоге приложения.. по-прежнему та же ошибка, что и вы, но для базы данных...
Caused by: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
Ответы
Ответ 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
}