2016-08-02 6 views
1

Я использую Firebase в нашем приложении для Android для удаленной конфигурации. Ниже инициализации сделано в моем классе приложений OnCreate метод:Firebase + RoboElectric: java.lang.IllegalStateException: FirebaseApp с именем [DEFAULT] не существует

FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance(); 
    FirebaseRemoteConfigSettings settings = new FirebaseRemoteConfigSettings.Builder() 
       .setDeveloperModeEnabled(BuildConfig.DEBUG) 
       .build(); 
    remoteConfig.setConfigSettings(settings); 
    setFirebaseDefault(); 

    Map<String, Object> defaults = new HashMap<>(); 
    defaults.put(FirebaseConstantsKt.BREAKING_NEWS, ""); 
    defaults.put(FirebaseConstantsKt.ENABLE_BREAKING_NEWS, false); 
    FirebaseRemoteConfig.getInstance().setDefaults(defaults); 

По this ответ мой build.gradle файл имеет следующую строку в ней:

apply plugin: 'com.google.gms.google-services' 

При запуске приложения он работает нормально, но когда я пытаюсь запустить свой тест Roboelectric, он выходит из строя со следующим исключением:

java.lang.IllegalStateException: FirebaseApp с именем [DEFAULT] не существует. в com.google.firebase.FirebaseApp.getInstance (Unknown Source) в com.google.firebase.FirebaseApp.getInstance (Unknown Source) в com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance (Unknown Source) на ком .woi.apppackage.android.MyApplication.initFirebase (MyApplication.java:225) at com.woi.apppackage.android.MyApplication.onCreate (MyApplication.java:107) at org.robolectric.internal.ParallelUniverse.setUpApplicationState (ParallelUniverse .java: 140) в org.robolectric.RobolectricTestRunner.setUpApplicationState (RobolectricTestRunner.java:433) в org.robolectric.RobolectricTestRunner $ 2.evaluate (RobolectricTestRunner.java:240) в org.robolectric.RobolectricTestRunner.ru nChild (RobolectricTestRunner.java:188) в org.robolectric.RobolectricTestRunner.runChild (RobolectricTestRunner.java:54) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners .ParentRunner $ 1.schedule (ParentRunner.java:71) на org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) at org.junit.runners.ParentRunner $ 2.оценить (ParentRunner.java:268) at org.robolectric.RobolectricTestRunner $ 1. оценить (RobolectricTestRunner.java:152) на org.junit.runners.ParentRunner.run (ParentRunner.java : 363) на org.junit.runner.JUnitCore.run (JUnitCore.java:137) на com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs (JUnit4IdeaTestRunner.java:69) в com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:234) в com.intellij.rt.execution.junit .JUnitStarter.main (JUnitStarter.java:74) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.invoke (Method.java:498) на com.intellij.rt.execution.application.AppMain.main (AppMain.java:144)

Тест не имеет ничего общего с Firebase. Если я прокомментирую код Firebase в onCreate, тест пройдет нормально. Я думаю, что у меня что-то отсутствует в моей инициализации Firebase

ответ

0

Я думаю, что есть ошибка с Firebase, которая вызывается на уровне приложения.У меня такая же проблема с базой данных Firebase, и она решена, переместив коды Firebase в моем классе активности (SplashScreen в моем случае).

Предлагаю попробовать сделать то же самое. :)

2

Это может быть вызвано сбой Firebase. Текущая реализация его создает процесс, называемый background_crash. Экземпляр вашего класса Application создается для каждого процесса вашего приложения, включая background_crash. Это описано в documentation.

Попробуйте добавить этот код только инициализировать Remote Config, когда в главном процессе:

if (FirebaseApp.getApps(this).isEmpty()) { 
     // In the crash process 
    } else { 
     // Not in crash process 
     // Init Remote Config here 
    } 
0

Вы можете сделать

if (FirebaseApp.getApps(context).isEmpty()) { 
     FirebaseApp.initializeApp(context); 
} 

только перед тем как инициализировать firebase. Это может произойти, если Firebase не была правильно инициализирована (возможно, из-за внутреннего исключения)

 Смежные вопросы

  • Нет связанных вопросов^_^