2016-05-20 5 views
18

Ich habe dieses Problem bekommen .. folgte der Upgrade-Anleitung für neue Firebase SDK ... speicherte die Google-Dienste JSON-Datei im App-Verzeichnis .. immer noch der gleiche Fehler Sie aber für die Datenbank ...java.lang.IllegalStateException: FirebaseApp mit Name [DEFAULT]

Caused by: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 
+0

Haben Sie das Firebase-Projekt mit Ihrem Paketnamen erstellt und laden Sie die Datei google-services.json herunter? –

+0

Ja, ich habe .. infact funktioniert meine App ohne Einstellung der Festplattenperferenzen richtig. Wenn ich versuche, Dispergierbarkeit in meiner Anwendungsklasse zu aktivieren, wie in den Dokumenten hier ... https://firebase.google.com/support/guides/firebase-android#get_a_database_reference_numbered ... erwähnt, schlägt mein Code fehl –

+0

Bekanntes Problem: https: //firebase.google.com/docs/crash/android#known-issues –

Antwort

32

Verwenden Sie Firebase Crash Reporting? Sie könnten diesen Fehler deswegen treffen, wenn es einen Hintergrundprozess und nicht den Hauptprozess trifft.

Absturzberichte erstellt einen zweiten Prozess (background_crash), um Abstürze zu senden. Leider teilen alle Prozesse in einer Android App eine gemeinsame Application Unterklasse, so dass Ihre onCreate Methode auch im Hintergrundprozess ausgeführt wird. Das versucht die Datenbank zu initialisieren, was fehlschlägt.

Die Lösung besteht darin, sicherzustellen, dass der Datenbankaufruf nur ausgeführt wird, wenn Firebase ordnungsgemäß konfiguriert ist (was im Hauptprozess sein wird). Sie können dies wie folgt überprüfen:

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

Dies scheint das Problem zu lösen ... Vielen Dank :) –

+0

Scheint das Problem auch für mich zu lösen. –

+0

Ich habe versucht, diese Lösung zu verwenden, aber der Code in geschweiften Klammern wird nie ausgeführt. Cloud, gib mir einen Hinweis, damit es funktioniert, bitte? –

4

Ich löste diesen Fehler, indem Sie nichts von Firebase in Anwendung setzen. Ich habe es in MainActivity eingegeben. Beispiel: MainActivity.java

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

-Update

Andere Lösung ist eine DatabaseHelper Klasse enthalten eine FirebaseDatabase Instanz erstellen.

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

und Verwendung von: FirebaseDatabase database = DatabaseHelper.getInstance();

+0

FirebaseDatabase zeigt mir Fehler, Kann U bitte helfen @lee –

0

Durch die Erweiterung der @Ian Barber-Lösung können Sie diese generische Prüfung verwenden, um die Verarbeitung Ihrer benutzerdefinierten Application.onCreate für alle Nicht-Hauptprozesse zu überspringen. Wenn die zusätzlichen Prozesse nicht zu Ihnen gehören, möchten Sie nicht, dass einer Ihrer benutzerdefinierten Prozesse ausgeführt wird.

@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 
} 
Verwandte Themen