web-dev-qa-db-ja.com

java.lang.IllegalStateException:[DEFAULT]という名前のFirebaseApp

私はこの問題を受け取っています..新しいfirebase sdkのアップグレードガイドに従いました...アプリディレクトリにGoogleサービスjsonファイルを保存しました..データベースと同じですが、あなたと同じエラーが...

Caused by: Java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
19
Rajiv Singh

Firebase Crash Reportingを使用していますか?メインではなくバックグラウンドプロセスにヒットした場合、このエラーが発生している可能性があります。

クラッシュレポートは、2番目のプロセス(background_crash)クラッシュを送信します。残念ながら、Androidアプリ内のすべてのプロセスは共通のApplicationサブクラスを共有するため、onCreateメソッドもバックグラウンドプロセスで実行されます。失敗するデータベース。

修正は、Firebaseが適切に構成されている場合にのみデータベース呼び出しが実行されるようにすることです(これはメインプロセスにあります)。次のように確認できます。

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

Firebaseの何もApplicationに入れないことで、このエラーを解決しました。 MainActivityに入れました。例:MainActivity.Java

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

-更新

他の解決策は、1つの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 database = DatabaseHelper.getInstance();

4
lee

@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
}
0
Nizam Mohideen