web-dev-qa-db-fra.com

java.lang.IllegalStateException: FirebaseApp avec le nom [DEFAULT]

J'ai eu ce problème .. suivi le guide de mise à niveau pour le nouveau sdk firebase ... enregistré le fichier JSON de Google Services dans le répertoire d'application .. toujours la même erreur que vous mais pour la base de données ...

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

Utilisez-vous le rapport d'incident Firebase? Vous risquez de frapper cette erreur à cause de cela si vous touchez un processus en arrière-plan et non le processus principal. 

Le rapport d'incident crée un deuxième processus (background_crash) pour envoyer des accidents. Malheureusement, tous les processus d'une application Android partagent une sous-classe Application commune. Votre méthode onCreate est donc également exécutée en arrière-plan. Cela tente d’initialiser la base de données, ce qui échoue. 

Le correctif consiste à s'assurer que l'appel de base de données n'est exécuté que lorsque Firebase est correctement configuré (ce qui fera partie du processus principal). Vous pouvez vérifier comme ceci:

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

J'ai résolu cette erreur en ne mettant rien de Firebase dans Application. Je l'ai mis dans MainActivity. Exemple: MainActivity.Java

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

-METTRE À JOUR

Une autre solution est de créer une classe DatabaseHelper contenant une instance de 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;
  }
}

et utilisant avec: base de données FirebaseDatabase = DatabaseHelper.getInstance ();

4
lee

En étendant la solution de @Ian Barber, vous pouvez essayer cette vérification générique pour ignorer le traitement de votre Application.onCreate personnalisé pour tous les processus non principaux. Si les processus supplémentaires ne vous appartiennent pas, vous ne souhaitez pas que votre programme personnalisé soit exécuté.

@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