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);
}
});
}
}
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.
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.)
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'
}
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:
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
}
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.
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.
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.5
comme 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.
mettre à jour le chemin de classe principal 'com.google.gms: google-services: 4.2.0'
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.
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.
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
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
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.
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() }
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'
}
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).