web-dev-qa-db-fra.com

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

Je suis confronté à ce problème et vu quelques réponses sur ce site, mais je n'ai pas eu de solution adéquate.
J'ai utilisé la version précédente de Firebase qui fonctionne bien, mais lorsque j'essaie de mettre à niveau à l'aide de Mise à nivea et de mettre à jour la classe Firebase à DatabaseReference, cela indique erreur et ne fonctionne pas.
J'ajoute le code complet de mon fichier manifeste, merci de m'aider à résoudre ce problème.
Voici mon manifest

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="firebasechat.com.firebasechat">

    <uses-permission Android:name="Android.permission.INTERNET" />

    <application
        Android:allowBackup="true"
        Android:name=".Activity.SimpleBlog"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:roundIcon="@mipmap/ic_launcher_round"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
        <activity Android:name=".Activity.RegisterActivity">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

mon Module app 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

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:4.2.0'// Updated version of google service
    }
}
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com" // Google's Maven repository
        }
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

Ci-dessous, 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<String>(){
                        @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, "registration successful", 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, "registration successful", Toast.LENGTH_LONG).show();
                                    } else {
                                        Toast.makeText(RegisterActivity.this, "username already exists", 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);

            }
        });
    }
}
37
Sakib Syed

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

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

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

dependencies {
    ....
}

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

Un plugin est requis pour traiter votre configuration json à partir de firebase et éviter les conflits de dépendance. Vous pouvez lire ici pour plus de détails.

37
Florescu Cătălin

Passé littéralement une journée entière. Finalement, c'était la solution.

Freaking 0 au lieu de 1 et vous ne devrez pas utiliser l'initialize firebaseapp ou quelque chose comme ça.

Dans la partie Projet, utilisez les services Google: 4.0.0 et non 4.1.0.

De plus, appliquer une déclaration de plugin à la fin n'est également pas nécessaire selon mon expérience.

(En espérant avoir ajouté la base de données firebase à partir de tools => assistant firebase. Les étapes 1 et 2 sont à droite et en vert.)

41
user3156040

Vous avez le même problème et résolu de cette façon:

en activité:

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

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

dependencies {
    ....
}

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

est le projet de grade:

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

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

J'ai invoqué cette initialisation et parfois, l'utilisateur subissait un plantage de temps en temps lorsqu'il ouvrait mon application. Je supprime donc cette ligne de code, puis tout fonctionne bien. Veillez à invoquer cette initialisation .

La capture de la documentation FirebaseApp:

enter image description here

Mise à jour: ci-dessous Une exception se produira si vous essayez d'ajouter cette ligne [Certains réseaux de publicité ont besoin de cette ligne, ils ajoutent également un processus dans leur AndroidManifest]

Impossible d'obtenir le verrou exclusif sur la persistance hors ligne du client Firestore. Cela signifie généralement que vous utilisez Firestore à partir de plusieurs processus dans votre application. N'oubliez pas que les applications multi-processus Android exécutent le code de votre classe Application dans tous les processus. Il est donc peut-être nécessaire d'éviter l'initialisation de Firestore dans votre classe Application. Si vous utilisez intentionnellement Firestore à partir de plusieurs processus, vous ne pouvez activer la persistance hors ligne (par exemple, appelez setPersistenceEnabled (true)) dans l'un d'entre eux.

Pour résoudre ce problème:

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()) {
        String name = processInfo.processName;
        if (!StringUtils.isEmpty(name) && pid == processInfo.pid && name.equals(APPLICATION_ID)) {
            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);
        // other things
        return;
    }
    // other things
}

UPDATE: Parfois, mon application jette une exception en dessous de l'exception.

Impossible de créer une application Ma classe d'application : Java.lang.IllegalStateException: FirebaseApp par défaut n'est pas initialisé dans ce processus MY_APPLICATION_ID. Assurez-vous d'appeler FirebaseApp.initializeApp (Context) en premier.

Pour résoudre ce problème: permet de mettre à 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) {
        // other things
        return;
    }
    // other things
}
12
Robust
  1. J'ai eu le même problème il y a quelque temps.

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

    Il suffit d’importer les services Firebase et Google Play les plus récents.

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

ajouter à 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.

10
mahendren

La première chose à faire: les fichiers JSON de configuration de projet peuvent mal tourner/devenir obsolètes, principalement lors de la mise à niveau de Firebase.

Allez dans Outils-> Firebase-> Cloud Messaging-> Configurer la messagerie cloud de Firebase .

Même si vous avez fait cela dans le passé, cela vaut la peine de vérifier ici car les choses sont mises à jour de temps en temps. J'ai synchronisé mon projet et cela a résolu le problème.

Quant à l'appel de FirebaseApp.initializeApp, ce n'est pas nécessaire, du moins pas pour FCM. Voir le documentations FCM .

De plus, si elle renvoie la valeur null, cela signifie qu’elle échoue. Par conséquent, l’appeler avant d’appeler getInstance ne suffira pas.

Notez qu'il s'agit de getInstance de FirebaseInstanceId:

public static FirebaseInstanceId getInstance() {
    return getInstance(FirebaseApp.getInstance());
}

Où d'autre part:

@Nullable
public static FirebaseApp initializeApp(Context var0) {
    Object var1 = sLock;
    synchronized(sLock) {
        if (zzf.containsKey("[DEFAULT]")) {
            return getInstance();
        } else {
            FirebaseOptions var2;
            return (var2 = FirebaseOptions.fromResource(var0)) == null ? null : initializeApp(var0, var2);
        }
    }
}

Cela signifie que si initializeApp renvoie null, vous avez probablement des problèmes de configuration. Au moins - à vérifier. Pour savoir où vous en êtes, placez un point d'arrêt à un moment donné où Context est visible, puis essayez d'évaluer FirebaseApp.initialize(context) pour vous assurer qu'il ne renvoie pas la valeur null.

4
Maneki Neko

J'ai eu le même problème aussi et j'ai remarqué que ce problème ne m'est apparu que lorsque j'ai ajouté la dépendance à Firebase Storage. En utilisant l’API 28, j’ai veillé à ce que toutes les dépendances de Firebase aient la même version d’importation, à savoir 16.0.5comme la dépendance de stockage.

implementation 'com.google.firebase:firebase-core:16.0.5'
implementation 'com.google.firebase:firebase-auth:16.0.5'
implementation 'com.google.firebase:firebase-database:16.0.5'
implementation 'com.google.firebase:firebase-storage:16.0.5'

J'ai mis à jour ma version de gradle pour

classpath 'com.Android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'

Et j'ai ajouté la ligne en dessous du module d'application

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

alors cela a fonctionné pour moi.

3
Lovish-Pandey

mettre à jour le chemin de classe principal 'com.google.gms: google-services: 4.2.0'

2
Bijesh

Veuillez rétrograder le plug-in de service Google de la version 4.1.0 à la version 4.0.1 dans le projet build.gradle du projet.

classpath 'com.google.gms:google-services:4.0.1'

Et ajoutez ce code à onCreate ()

FirebaseApp.initializeApp(this);

cela a fonctionné pour moi.

2
Tarik

Nul besoin d'ajouter quoi que ce soit dans la classe Application ou d'appeler initializeApp () pour firebase. Après avoir ajouté des fonctionnalités Firebase à votre application via Outils -> Firebase -> (Toutes les fonctionnalités) -> Assurez-vous que les étapes 1 et 2 sont vertes et cochées.

Allez dans le fichier de dégradé du projet et utilisez classpath 'com.google.gms:google-services:4.2.0'

c'est ça.

1
androidStud

J'ai eu le même problème, j'ai modifié mon projet build.gradle pour être comme suit

     dependencies {

    classpath 'com.Android.tools.build:gradle:3.2.1'
    classpath 'com.google.gms:google-services:3.2.0'

....
                   }

alors j'ai ajouté la ligne ci-dessous dans le module d'application

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

et c'était résolu

1
Brigth Ligth

Vous rencontrez cette erreur à cause de Google updata, il vous suffit de procéder comme suit

Changer la dépendance suivante de

dependencies {
        classpath 'com.Android.tools.build:gradle:3.3.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:4.1.0'
    }

à

 dependencies {
            classpath 'com.Android.tools.build:gradle:3.3.2'
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
            classpath 'com.google.gms:google-services:4.0.0'
        }

La différence est que google-services: 4.1.0 devrait être remplacé par 4.0.0

0
Mbaiorga

Pour éviter cette erreur, vous devez suivre toutes les étapes de la configuration de Firebase pour Android https://firebase.google.com/docs/Android/setup .

J'ai eu la même erreur que j'ai oublié de suivre deux étapes et résolu par

1) ajout du chemin de classe 'com.google.gms: google-services: 4.2.0' au fichier de construction de la gradation au niveau du projet.

2) ajouter appliquer le plug-in: 'com.google.gms.google-services' au fichier de construction de la gradation au niveau du module.

0
Arnav Rao
implementation 'com.google.firebase:firebase-core:16.0.6

Si l'erreur FirebaseApp.initializeApp (Context) ajoute "mavenCentral" dans votre build.gradle

enter code here repositories {google() jcenter() mavenCentral() }
0
Croid

Essayez de déclasser ou de mettre à niveau la version de Gradle.

Par exemple, votre build.gradle a:

dependencies {
    classpath 'com.Android.tools.build:gradle:3.3.0'
}

Changer en

dependencies {
    classpath 'com.Android.tools.build:gradle:3.2.0'
}
0
Agung Pramono

Je n'ai pas utilisé FirebaseApp.initializeApp(Context) sur mon projet.

Ça marche pour moi. Vous devriez vérifier vos fichiers Gradle et vous assurer d'avoir implémenté ces lignes:

ajoutez apply plugin: 'com.google.gms.google-services' dans votre classe (app)

ou

ajoutez ceci classpath 'com.google.gms:google-services:4.2.0' dans votre classe (projet).

0
H.K