73 votes

Assurez-vous d'appeler FirebaseApp.initializeApp(Context) d'abord dans Android

Je suis confronté à ce problème et j'ai vu quelques réponses sur ce site mais je n'ai pas obtenu de solution appropriée.
J'ai utilisé la version précédente de Firebase qui fonctionne bien mais lorsque j'essaie de mettre à jour en utilisant la mise à jour et de mettre à jour la classe Firebase en DatabaseReference cela affiche une erreur et ne fonctionne pas.
Je vais ajouter le code entier de mon fichier de manifeste alors veuillez m'aider à résoudre ce problème.
Voici mon manifeste

mon Module de l'application est donné ci-dessous.

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "firebasechat.com.firebasechat"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        multiDexEnabled  true

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.volley:volley:1.0.0'
compile "com.google.firebase:firebase-database:11.0.0"
compile 'com.google.android.gms:play-services:11.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
testCompile 'junit:junit:4.12'
    testCompile 'junit:junit:4.12'
}

et Project gradle

    // Fichier de construction de niveau supérieur où vous pouvez ajouter des options de configuration communes à tous les sous-projets / modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:4.2.0'// Version mise à jour du service Google
    }
}
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com" // Référentiel Maven de Google
        }
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

Voici mon Activity.

    public class RegisterActivity extends AppCompatActivity {

    EditText username, password;
    Button registerButton;
    String user, pass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        username = (EditText)findViewById(R.id.username);
        password = (EditText)findViewById(R.id.password);
        registerButton = (Button)findViewById(R.id.registerButton);

          FirebaseApp.initializeApp(this);

        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                user = username.getText().toString();
                pass = password.getText().toString();

                    final ProgressDialog pd = new ProgressDialog(RegisterActivity.this);
                    pd.setMessage("Loading...");
                    pd.show();

                    String url = "https://pure-coda-174710.firebaseio.com/users.json";

                    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener(){
                        @Override
                        public void onResponse(String s) {

//                            Firebase reference = new Firebase("https://pure-coda-174710.firebaseio.com/users");
                            DatabaseReference reference = FirebaseDatabase.getInstance()
                                    .getReferenceFromUrl("https://pure-coda-174710.firebaseio.com/users");

                            if(s.equals("null")) {
                                reference.child(user).child("password").setValue(pass);
                                Toast.makeText(RegisterActivity.this, "enregistrement réussi", Toast.LENGTH_LONG).show();
                            }
                            else {
                                try {
                                    JSONObject obj = new JSONObject(s);

                                    if (!obj.has(user)) {
                                        reference.child(user).child("password").setValue(pass);
                                        Toast.makeText(RegisterActivity.this, "enregistrement réussi", Toast.LENGTH_LONG).show();
                                    } else {
                                        Toast.makeText(RegisterActivity.this, "le nom d'utilisateur existe déjà", Toast.LENGTH_LONG).show();
                                    }

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                            pd.dismiss();
                        }

                    },new Response.ErrorListener(){
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {
                            System.out.println("" + volleyError );
                            pd.dismiss();
                        }
                    });

                    RequestQueue rQueue = Volley.newRequestQueue(RegisterActivity.this);
                    rQueue.add(request);

            }
        });
    }
}

0 votes

Quelle est l'erreur ?

0 votes

@ Burhanuddin Rashid cette erreur se produit au moment de l'exécution comme java.lang.IllegalStateException: Default FirebaseApp n'est pas initialisé dans ce processus firebasechat.com.firebasechat. Assurez-vous d'appeler d'abord FirebaseApp.initializeApp(Context).

0 votes

Veuillez afficher votre code manifest, votre fichier build.gradle au niveau du module et votre fichier build.gradle au niveau du projet. Avez-vous également ajouté le fichier google-services.json dans votre projet ?

87voto

Florescu Cătălin Points 2943

Dans votre classe d'application SimpleBlog, initialisez FirebaseApp dans la méthode onCreate() et supprimez-la de RegisterActivity afin que Firebase s'initialise dans toute l'application, pas seulement dans une seule activité.

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
}

Ajoutez également apply plugin: 'com.google.gms.google-services' à la fin du fichier gradle de l'application :

dependencies {
    ....
}

apply plugin: 'com.google.gms.google-services'

Le plugin est nécessaire pour traiter votre configuration json de Firebase et éviter les collisions de dépendances. Vous pouvez lire ici pour plus de détails.

0 votes

Avez-vous ajouté une configuration dans les fichiers gradle ?

0 votes

@ Florescu George Catalin Merci pour la réponse , j'ai mis à jour ma question dans laquelle j'ai ajouté le code complet de mes fichiers gradle.

0 votes

J'ai ajouté le plugin mais la construction n'est pas générée et affiche une erreur comme ci-dessous Erreur : l'exécution de la tâche ':app:processDebugGoogleServices' a échoué. > Veuillez résoudre le conflit de version en mettant à jour la version du plugin google-services (des informations sur la dernière version sont disponibles sur bintray.com/android/android-tools/…) ou en mettant à jour la version de com.google.android.gms en 11.0.4.

49voto

user3156040 Points 390

Passé littéralement toute la journée. Enfin, c'était la solution.

Maudite 0 au lieu de 1 et vous n'aurez pas besoin d'utiliser l'initialisation firebaseapp ou quoi que ce soit de ce genre.

Dans Project gradle, utilisez les services Google: 4.0.0 et non pas 4.1.0.

De plus, la déclaration du plugin à la fin n'est pas non plus nécessaire dans mon expérience.

(En espérant que vous ayez ajouté la base de données firebase depuis les outils => assistant firebase. L'étape 1 et l'étape 2 sont correctes et en vert.)

5 votes

Merci user3156040, "Dans le projet Gradle, utilisez les services Google : 4.0.0 et non 4.1.0" Ce changement a fonctionné pour moi.

4 votes

Beaucoup de mercis, cette solution fonctionne toujours en fait. Android Studio a par défaut généré 4.1.0 :( bien qu'il y ait une nouvelle version 4.2.0 (qui fonctionne)

3 votes

Après 4 ans d'utilisation de Firebase, cela dit soudainement d'appeler FirebaseApp.initializeApp(Context) .... J'ai juste changé le projet gradle, des services Google: 4.1.0 à >>> 4.2.0.... et tout a bien fonctionné!

23voto

Robust Points 1255

Selon la documentation de FirebaseApp, vous n'avez pas besoin d'appeler cette initialisation, sauf si votre application nécessite l'accès à un autre projet Firebase.

J'ai appelé cette initialisation et parfois, l'utilisateur obtient des plantages de temps en temps lorsqu'il ouvre mon application, donc j'ai supprimé cette ligne de code et tout fonctionne bien. Faites attention à appeler cette initialisation.

Capture de la documentation FirebaseApp:

entrer la description de l'image ici

Mise à jour: l'Exception ci-dessous se produira si vous essayez d'ajouter cette ligne [Certains réseaux publicitaires nécessitent cette ligne, ils ajoutent également certains processus dans leur AndroidManifest]

Impossible de verrouiller exclusivement la persistance hors ligne du client Firestore. Cela signifie généralement que vous utilisez Firestore à partir de plusieurs processus dans votre application. Gardez à l'esprit que les applications Android multi-processus exécutent le code de votre classe Application dans tous les processus, de sorte que vous devrez peut-être éviter d'initialiser Firestore dans votre classe Application. Si vous utilisez intentionnellement Firestore à partir de plusieurs processus, vous ne pouvez activer la persistance hors ligne (c'est-à-dire appeler setPersistenceEnabled(true)) que dans l'un d'eux.

Pour le résoudre:

1) ajoutez la méthode ci-dessous dans votre classe Application:

private boolean isMainProcess(Context context) {
    if (null == context) {
        return true;
    }
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    int pid = android.os.Process.myPid();
    for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
        if (APPLICATION_ID.equals(processInfo.processName) && pid == processInfo.pid) {
            return true;
        }
    }
    return false;
}

2) Enveloppez onCreate de votre Application

@Override
public void onCreate() {
    super.onCreate();
    if (!isMainProcess(this)) {
        FirebaseApp.initializeApp(this);
        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        FirebaseFirestore.getInstance().setFirestoreSettings(settings);
        // autres choses
        return;
    }
    // autres choses
}

MISE À JOUR: Parfois, mon application lance l'exception suivante

Impossible de créer l'application Ma Classe d'Application : java.lang.IllegalStateException: Default FirebaseApp n'est pas initialisé dans ce processus MY_APPLICATION_ID. Assurez-vous d'appeler d'abord FirebaseApp.initializeApp(Context).

Pour le résoudre: mettez à jour la méthode onCreate:

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
    boolean isMain = isMainProcess(this);
    FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder().setPersistenceEnabled(isMain).build();
    FirebaseFirestore.getInstance().setFirestoreSettings(settings);
    if (!isMain) {
        // autres choses
        return;
    }
    // autres choses
}

0 votes

C'est bien, mais l'utilisation de StringUtils peut être remplacée par name.equals(""). De plus, il faut vérifier si le gestionnaire est nul avant de l'utiliser!

20voto

pw2 Points 161

Problème identique et résolu de cette manière :

dans l'activité :

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
}

dans le fichier gradle de l'application (à la fin du fichier) :

dependencies {
    ....
}

apply plugin: 'com.google.gms.google-services'

dans le fichier gradle du projet :

   dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.0.0'
}

0 votes

Pour moi, ajouter le plugin: 'com.google.gms.google-services' en haut à droite en suivant le plugin: 'com.android.application' fonctionne.

0 votes

Il a fallu utiliser la version com.google.gms:google-services:4.0.1 en tant que classpath, des erreurs sont survenues avec certaines autres versions, alors continuez d'essayer différentes versions si cela ne fonctionne pas pour vous

1 votes

OMG s'il te plaît ne fais pas ça, la documentation firebase dit littéralement qu'il ne doit pas être appelé explicitement (à moins que vous ayez plus d'une instance FS dans votre application) car la bibliothèque s'initialise automatiquement!

11voto

mahendren Points 151
  1. J'ai rencontré ce même problème il y a quelque temps.

    Vous essayez d'obtenir une instance de Firebase sans l'initialiser. Veuillez ajouter cette ligne de code avant d'essayer d'obtenir une instance de Firebase:

    Importez simplement la dernière version de Firebase et des services Google Play.

    Version la plus récente de la mise à jour (exemple):

Ajoutez ces lignes à build.gradle

dependencies {

    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation 'com.firebase:firebase-jobdispatcher:0.8.5'

}
apply plugin: 'com.google.gms.google-services'

dependencies {
    classpath 'com.android.tools.build:gradle:3.3.1'
    classpath 'com.google.gms:google-services:4.2.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

C'est tout. Profitez de votre codage.

0 votes

Cela fonctionne en effet. J'utilisais la version 4.1.0 et le passage à la version 4.2.0 a suffi pour arrêter de recevoir ceci : "java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.allinlearning.assist_android. Make sure to call FirebaseApp.initializeApp(Context) first."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X