Je crée une application Android et j'essaie actuellement de mettre en œuvre l'authentification des utilisateurs à l'aide de Firebase. Autant que je sache, mon application est connectée à mon serveur Firebase.
Une erreur d'exécution survient lorsque j'essaie de passer de l'activité SignIn à l'activité SignUp en appuyant sur un bouton. L'application se bloque et je rencontre une erreur d'exécution.
Pour autant que je sache, l'erreur d'exécution provient de l'appel onCreate()
de l'activité SignUp lorsque je tente d'initialiser un objet FirebaseAuth
avec FirebaseAuth.getInstance()
. Cet appel échoue à cause de
Java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process seniordesign.phoneafriend. Make sure to call FirebaseApp.initializeApp(Context).
Cependant, je passe cet appel dans la méthode onCreate()
de ma classe Application, ce qui me convenait le mieux. J'ai ajouté l'appel initalizeApp()
à l'appel onCreate()
de SignUp, mais aucun dé. J'ai cherché d'autres personnes avec ce problème mais je n'ai rien trouvé de semblable. Merci pour toute aide.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="seniordesign.phoneafriend">
<uses-permission Android:name="Android.permission.INTERNET" />
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme"
Android:name="seniordesign.phoneafriend.PhoneAFriend">
<activity Android:name=".SignIn">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name=".SignUp"></activity>
</application>
</manifest>
PhoneAFriend.Java (Ma classe d'application)
public class PhoneAFriend extends Application {
public void onCreate(){
super.onCreate();
Firebase.setAndroidContext(this);
FirebaseApp.initializeApp(this);
}
}
SignUp.Java
public class SignUp extends AppCompatActivity {
protected Firebase ref;
protected EditText emailText;
protected EditText passText;
protected EditText confirmText;
protected Button button;
protected SignUp thisContext;
protected FirebaseAuth auth;
protected FirebaseAuth.AuthStateListener authListener;
private View.OnClickListener onClickListener;
public static Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
ref = new Firebase("https://phoneafriend-7fb6b.firebaseio.com");
emailText = (EditText) findViewById(R.id.signup_emailText);
passText = (EditText) findViewById(R.id.signup_passwordText);
confirmText = (EditText) findViewById(R.id.signup_passwordConfirm);
intent = new Intent(this, SignIn.class);
//Tried this already
//FirebaseApp.initializeApp(this);
auth = FirebaseAuth.getInstance();
button = (Button) findViewById(R.id.signup_button);
onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
createUser(view);
Log.v("SignUp Button" , "Clicked; Attempting to create user");
}
};
button.setOnClickListener(onClickListener);
authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged( FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d("FirebaseAuth", "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d("FirebaseAuth", "onAuthStateChanged:signed_out");
}
// ...
}
};
thisContext = this;
}
@Override
public void onStart(){
super.onStart();
//auth.addAuthStateListener(authListener);
}
@Override
public void onStop(){
super.onStop();
if(authListener != null) {
//auth.removeAuthStateListener(authListener);
}
}
protected void createUser(View view){
String cString = null;
String pString = null;
String eString = emailText.getText().toString();
if(passText.getText() != null && confirmText.getText() != null) {
pString = passText.getText().toString();
cString = confirmText.getText().toString();
Log.v("SignUP: Pass Null check" , "Pass" );
if (emailText.getText() != null && pString.equals(cString) && passText.getText() != null) {
Log.v("SignUP: Sign up check " , "Pass");
auth.createUserWithEmailAndPassword(emailText.getText().toString() , passText.getText().toString())
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.v("createUser complete" , "status: " + task.isSuccessful());
if(task.isSuccessful()){
startActivity(SignUp.intent);
}
}
});
}
}
return;
}
}
Comme indiqué par qbix, vous utilisez beaucoup les appels API de la version que vous allez utiliser. Si possible, vous devriez utiliser la nouvelle API car elle sera définitivement prise en charge dans le futur.
Voir les docs ici:
https://firebase.google.com/docs/database/Android/start/
Retirer:
Firebase.setAndroidContext(this);
FirebaseApp.initializeApp(this);
Et met:
FirebaseDatabase database = FirebaseDatabase.getInstance();
Si qbix met son commentaire en réponse, vous devez accepter le sien plutôt que le mien, vu comment il m'a battu de quelques minutes.
Également:
Si vous utilisez utilisez l'ancienne base de feu et que vous avez besoin d'aide pour changer de système, ce guide est complet et vous aidera à utiliser le commutateur. C'est un commutateur assez simple.
Je sais qu'il y a déjà une réponse acceptée. Cependant, j'ai rencontré le même message d'erreur disant: Java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process (name). Make sure to call FirebaseApp.initializeApp(Context).
J'ai essayé plusieurs solutions trouvées sur SO, et tout revérifié, jusqu'à ce que je découvre que le nom du package défini dans la console Firebase ne correspond pas à celui défini dans mon fichier manifeste.
Essayez d’aller dans votre console Firebase -> Paramètres du projet -> vérifiez si les noms de paquetages correspondent.
J'espère que ça peut aider certains :)
La première vérification devrait être la documentation de Firebase et les outils de
Android Studio -> Outils -> Firebase -> Messagerie dans le cloud.
Même si vous l'avez déjà fait.
Encore une fois, même si vous l'aviez déjà fait avant, les versions de Firebase nécessitant généralement un JSON de configuration à jour.
Mettre à niveau classpath 'com.google.gms:google-services:4.1.0'
à classpath 'com.google.gms:google-services:4.2.0'
dans le projet Gradle a fonctionné pour moi.
Après de nombreuses frustrations, l'activation des autorisations Internet a résolu ce problème.
Il est plus facile d'utiliser l'assistant Firebase inclus dans Android Studio : ajoute toutes les dépendances dans les fichiers de dégradés, crée le projet firebase si nécessaire, connecte l'application au projet, etc.
Dans Android Studio, ouvrez menu Outils/Firebase et suivez les instructions.
Ensuite, FirebaseApp.initializeApp () renverra une valeur valide.