2016-06-06 40 views
9

Con quanto segue, la prima volta che viene chiamato funziona, ma non riesce a effettuare chiamate successive con "Nome Firebase [DEFAULT] già esistente!"Come verificare se un'app Firebase è già inizializzata su Android

public FirebaseDatabase conn(Context c) { 
     FirebaseOptions options = new FirebaseOptions.Builder() 
       .setApiKey("key") 
       .setDatabaseUrl("url") 
       .setApplicationId("ID") 
       .build(); 


     /////I tried Try and Catch with no success////// 
     FirebaseApp app = FirebaseApp.initializeApp(c, options); 

     /// for this : FirebaseApp app = FirebaseApp.initializeApp(c, options, "some_app"); 
     //// will fail with "FirebaseApp name some_app already exists!" 
     return FirebaseDatabase.getInstance(app); 
} 

Tutto questo è un tentativo di connettersi a una seconda App Firebase.

risposta

23

Sul Firebase web, si controlla se già inizializzato con:

if (!firebase.apps.length) { 
    firebase.initializeApp({}); 
} 
+0

Cool ma in Android questo impossibile –

2

Penso che quello che vuoi fare è controllare l'elenco delle app in esecuzione prima di inizializzare la tua app. Ognuna delle SDK hanno un metodo per ottenere questo array, in Android E 'getApps:

https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseApp.html

Quindi è possibile controllare per vedere se la vostra applicazione è già inizializzato.

Nel mio caso ho appena finito di controllare la lunghezza dell'array (sto usando il javascript/web sdk quindi sono sicuro che è un po 'diverso per Android) e inizializzando una nuova app se è 0.

0

ho affrontato il problema simile, ho risolto come segue:

  1. Creare una var per l'applicazione e inizializzarlo wi esimo nullo
  2. Prendere di riferimento della domanda, mentre l'inizializzazione
  3. Controllare prima di inizializzare di nuovo

//global variable 
var firebaseResumeDownloadAdd = null; 

//inside function check before initializing 
if(firebaseResumeDownloadAdd==null){ 
    firebaseResumeDownloadAdd = 
    firebase.initializeApp(functions.config().firebase); 
} 
0

ho affrontato il problema simile. Ho risolto il seguente problema eliminando l'app già inizializzata.

// Access your firebase app 
    let app = firebase.app(); 
    // Delete your app. 
    app.delete(app); 

Soluzione per il web.

1

Puoi provare a ottenere l'istanza dell'applicazione Firebase, nel suo codice FireBase controlla se è inizializzata, altrimenti getta un IllegalStateException.

try{ 
     FirebaseApp.getInstance(); 
    } 
    catch (IllegalStateException e) 
    { 
     //Firebase not initialized automatically, do it manually 
     FirebaseApp.initializeApp(this); 
    }