2016-05-20 17 views
18

Ho ricevuto questo problema .. ho seguito la guida di aggiornamento per il nuovo sdk di Firebase ... ho salvato il file json di Google Services nella directory app .. ancora lo stesso errore di ma per il database ...java.lang.IllegalStateException: FirebaseApp con nome [DEFAULT]

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

Hai creato il progetto Firebase con il nome del pacchetto e scaricato google-services.json? –

+0

Sì, sì .. infatti la mia app senza impostare diskpersistence funziona correttamente. Se provo a abilitare la dispersione nella mia classe Application come menzionato nei documenti qui ... https://firebase.google.com/support/guides/firebase-android#get_a_database_reference_numbered ... il mio codice non funziona –

+0

Problema noto: https: //firebase.google.com/docs/crash/android#known-issues –

risposta

32

Stai utilizzando Firebase Crash Reporting? Si potrebbe essere colpire questo errore a causa di questo se colpisce un processo in background e non il principale.

Crash Reporting crea un secondo processo (background_crash) per inviare arresti anomali. Sfortunatamente, tutti i processi in un'app Android condividono una sottoclasse comune Application, pertanto il metodo onCreate viene eseguito anche nel processo in background. Questo tenta di inizializzare il database, che fallisce.

La correzione consiste nell'assicurarsi che la chiamata al database venga eseguita solo quando Firebase è configurato correttamente (che sarà nel processo principale). È possibile verificare in questo modo:

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

Questo sembra risolvere il problema ... Grazie mille :) –

+0

Sembra risolvere il problema anche a me. –

+0

Ho provato a utilizzare questa soluzione, ma il codice all'interno delle parentesi non viene mai eseguito. Cloud mi dai un suggerimento per farlo funzionare, per favore? –

4

Ho risolto questo errore non inserire nulla di Firebase nell'applicazione. L'ho messo in MainActivity. Esempio: MainActivity.java

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

-Aggiorna

Altra soluzione è creare una classe DatabaseHelper contenere un'istanza 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; 
    } 
} 

e utilizzo da: FirebaseDatabase database = DatabaseHelper.getInstance();

+0

FirebaseDatabase mi mostra errore, Can U, per favore aiutami @lee –

0

Estendendo la soluzione di @Ian Barber, è possibile provare questo controllo generico per saltare l'elaborazione di Application.onCreate personalizzato per tutti i processi non principali. Se i processi aggiuntivi non ti appartengono, allora non vuoi che la tua abitudine venga eseguita.

@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 
} 
Problemi correlati