2016-05-20 28 views
18

Otrzymałem ten problem .. postępował zgodnie z przewodnikiem uaktualnienia dla nowej sdk firebase ... zapisał plik json usługi Google w katalogu aplikacji. Wciąż ten sam błąd co Ty, ale dla bazy danych ...java.lang.IllegalStateException: FirebaseApp z nazwą [DEFAULT]

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

Utworzenie projektu bazy ogniowej z nazwą pakietu i pobranie google-services.json? –

+0

Tak, zrobiłem .. zainfekować moją aplikację bez ustawiania diskpersistence działa poprawnie. Jeśli spróbuję włączyć dyspersję w mojej klasie aplikacji, jak wspomniano w dokumentacji tutaj ... https://firebase.google.com/support/guides/firebase-android#get_a_database_reference_numbered ... mój kod kończy się niepowodzeniem –

+0

Znany problem: https: //firebase.google.com/docs/crash/android#known-issues –

Odpowiedz

32

Czy używasz Firebase Crash Reporting? Być może trafiasz w ten błąd z powodu tego, że uderza on w proces tła, a nie w główny.

Crash Reporting tworzy drugi proces (background_crash), aby wysłać awarie. Niestety wszystkie procesy w aplikacji na Androida mają wspólną podklasę Application, więc twoja metoda onCreate jest również uruchamiana w procesie w tle. To próbuje zainicjować bazę danych, która się nie powiedzie.

Rozwiązaniem jest upewnienie się, że wywołanie bazy danych jest uruchamiane tylko wtedy, gdy baza Firebase jest poprawnie skonfigurowana (która będzie w procesie głównym). Możesz to sprawdzić:

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

Wydaje się, że to rozwiązuje problem ... Wielkie dzięki :) –

+0

Wydaje mi się, że mogę rozwiązać problem. –

+0

Próbowałem użyć tego rozwiązania, ale kod w nawiasach klamrowych nigdy nie jest wykonywany. Cloud, daj mi wskazówkę, żeby to zadziałało, proszę? –

4

Rozwiązałem ten błąd, nie umieszczając niczego w aplikacji Firebase. Wrzuciłem to do MainActivity. Przykład: MainActivity.java

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

-update

Innym rozwiązaniem jest utworzenie klasy DatabaseHelper zawierać jeden przykład 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; 
    } 
} 

i używania przez: baza FirebaseDatabase = DatabaseHelper.getInstance();

+0

FirebaseDatabase pokazuje mi błąd, może mi pomóc mi @lee –

0

Po rozszerzeniu rozwiązania @Ian Barber, możesz spróbować tego ogólnego sprawdzenia, aby pominąć przetwarzanie niestandardowego Application.onCreate dla wszystkich innych niż główne procesy. Jeśli dodatkowe procesy nie należą do ciebie, nie chcesz, aby któryś z twoich niestandardowych działał.

@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 
} 
Powiązane problemy