2016-08-02 2 views
1

私はFirebaseをリモートコンフィグレーションのアンドロイドアプリケーションで使用しています。私は、アプリケーションを実行するとFirebase + RoboElectric:java.lang.IllegalStateException:名前が[DEFAULT]のFirebaseAppが存在しません

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

:以下は私のアプリケーションクラスのonCreate方法で行わ初期化さ:thisあたりにも、私のbuild.gradleファイルを答えとして

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

は、その中に以下の行を持っていますそれは正常に動作しますが、私がRoboelectricテストケースを実行しようとすると、次の例外が発生してクラッシュします。

java.lang.IllegalStateException:名前が[DEFAULT]のFirebaseAppが存在しません。 COMでcom.google.firebase.FirebaseApp.getInstance(不明なソース)com.google.firebase.FirebaseApp.getInstanceで (不明なソース)com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstanceで (不明なソース) で .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:org.robolectric.RobolectricTestRunner.ruでorg.robolectric.RobolectricTestRunner $ 2.evaluateでorg.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:433) における140) (RobolectricTestRunner.java:240) org.junit.runnersでorg.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290) でorg.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54) でnChild(RobolectricTestRunner.java:188) .ParentRunner $ 1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58) org.junit.runners.ParentRunnerで$ 2.evaluate(ParentRunner.java:268) でorg.robolectric.RobolectricTestRunner $ 1.evaluate(RobolectricTestRunner.java:152) でorg.junit.runners.ParentRunner.run(ParentRunner.java :363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) com.intellij.rt.execution.junitでcom.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)でcom.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) でsun.reflect.DelegatingMethodAccessorImpl.invokeでsun.reflect.NativeMethodAccessorImpl.invokeでsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) (NativeMethodAccessorImpl.java:62) (AT .JUnitStarter.main(JUnitStarter.java:74) com.intellij.rt.execution.application.AppMain.mainでjava.lang.reflect.Method.invoke(Method.java:498) でDelegatingMethodAccessorImpl.java:43) (AppMain.java:144)

このテストはFirebaseとは関係ありません。 FirebaseコードをonCreateにコメントアウトすると、テストはうまく動作します。私はFirebaseの初期設定で何か不足していると思います。

答えて

0

アプリケーションレベルで呼び出されているFirebaseのバグがあると思います。Firebaseデータベースで同じ問題が発生し、Firebaseコードを自分のアクティビティクラス(私の場合はSplashScreen)に移動して解決しました。

私は同じことをやってみてください示唆しています。 :)

2

これはFirebaseクラッシュによって引き起こされることがあります。現在の実装では、background_crashというプロセスが作成されます。 Applicationクラスのインスタンスは、background_crashなど、アプリケーションの各プロセスに対して作成されます。これは、documentationに記載されています。唯一のあなたの主なプロセスにする場合、リモートコンフィグを初期化するには、このコードを追加

試してみてください。

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

あなたはfirebaseを初期化する直前に

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

を行うことができます。 Firebaseが正しく初期化されなかった場合、これは(多分ために内部例外の)

を発生することがあります
関連する問題