Beim folgenden Aufruf funktioniert es zum ersten Mal, schlägt jedoch bei nachfolgenden Aufrufen mit "FirebaseApp-Name [DEFAULT] ist bereits vorhanden!"
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);
}
Alle oben genannten Schritte sind der Versuch, eine Verbindung zu einer zweiten Firebase-App herzustellen.
In firebase web prüfen Sie, ob bereits initialisiert wurde mit:
if (!firebase.apps.length) {
firebase.initializeApp({});
}
Ich denke, Sie möchten die Liste der laufenden Apps überprüfen, bevor Sie Ihre App initialisieren. Für jedes SDKs gibt es eine Methode zum Abrufen dieses Arrays. In Android ist es getApps
:
https://firebase.google.com/docs/reference/Android/com/google/firebase/FirebaseApp.html
Dann können Sie überprüfen, ob Ihre App bereits initialisiert ist.
In meinem Fall habe ich gerade die Länge des Arrays überprüft (ich verwende Javascript/Web-SDK, also bin ich sicher, dass es für Android ein bisschen anders ist) und initialisiert eine neue App, wenn sie 0 ist.
Für diejenigen, die sich fragen, wie sie die akzeptierte Antwort auf Android tun sollen:
if (FirebaseApp.getApps(context).isEmpty()) {
FirebaseApp.initializeApp(context);
}
und verwenden Sie in einer instrumentierten Testumgebung diesen Kontext:
InstrumentationRegistry.getContext()
Ich hatte ein ähnliches Problem. Ich löste das folgende Problem, indem ich die bereits initialisierte App löschte.
// Access your firebase app
let app = firebase.app();
// Delete your app.
app.delete(app);
Lösung funktioniert für das Web.
Sie können versuchen, die Firebase-App-Instanz abzurufen. In ihrem Code überprüft Firebase, ob sie initialisiert ist. Andernfalls wird eine IllegalStateException
ausgegeben.
try{
FirebaseApp.getInstance();
}
catch (IllegalStateException e)
{
//Firebase not initialized automatically, do it manually
FirebaseApp.initializeApp(this);
}
Ich war mit dem ähnlichen Problem konfrontiert und habe es wie folgt gelöst:
//global variable
var firebaseResumeDownloadAdd = null;
//inside function check before initializing
if(firebaseResumeDownloadAdd==null){
firebaseResumeDownloadAdd =
firebase.initializeApp(functions.config().firebase);
}
Sie können die App wie folgt löschen
if(!FirebaseApp.getApps().isEmpty()) {
FirebaseApp.getInstance().delete();
}