1
votes

L'application Android n'écrira pas dans la base de données Firebase Realtime

J'utilise Firebase et Android Studio pour créer une application. J'ai un écran d'enregistrement qui demande à l'utilisateur des informations telles que le nom d'utilisateur et l'emplacement, etc. Lorsque vous cliquez sur le bouton d'enregistrement, l'adresse e-mail et le mot de passe des utilisateurs fonctionnent et s'affichent dans l'onglet d'authentification de la console Firebase. Cependant, je ne peux pas obtenir les détails des utilisateurs tels que le nom d'utilisateur et l'emplacement, à stocker dans la base de données Firebase Realtime.

package com.example.securityapp;

public class Users {

     String username;
     String job;
     String email;
     String office;

     public Users()
    {

    }

    public Users(String username, String job, String email, String office)
    {
        this.username = username;
        this.job = job;
        this.email = email;
        this.office = office;
    }

    public String getUsername()
    {
        return username;
    }

    public String getJob() { return job; }

    public String getEmail()
    {
        return email;
    }

    public String getOffice()
    {
        return office;
    }



}

Users.java

package com.example.securityapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class register extends AppCompatActivity {

    private FirebaseAuth mAuth;
    EditText emailReg, passwordReg, password2, roleReg, officeReg;
    Button regButton;
    DatabaseReference databaseUsers;
    EditText usernameReg;

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

        emailReg = (EditText) findViewById(R.id.regEmail);
        usernameReg = (EditText) findViewById(R.id.regUsername);
        passwordReg = (EditText) findViewById(R.id.regPassword);
        regButton = (Button) findViewById(R.id.register_Button);
        password2 = (EditText) findViewById(R.id.confirm_password);
        roleReg = (EditText) findViewById(R.id.regRole);
        officeReg = (EditText) findViewById(R.id.regOffice);
        databaseUsers = FirebaseDatabase.getInstance().getReference();
        mAuth = FirebaseAuth.getInstance();
    }

    public void registerUser() {
        final String email = emailReg.getText().toString();
        final String password = passwordReg.getText().toString();
        String pass2 = password2.getText().toString();
        if(!pass2.equals(password))
        {
            Toast.makeText(register.this, "Passwords Do Not Match",
                    Toast.LENGTH_SHORT).show();
                    return;
        }
        //Code taken from https://firebase.google.com/docs/auth/android/start on 10/11/2019
        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information

                            Intent intent_signup = new Intent(register.this, home.class);
                            startActivity(intent_signup);
                            finish();
                            FirebaseUser user = mAuth.getCurrentUser();
                            Toast.makeText(register.this, "Authentication Successful!",
                                    Toast.LENGTH_SHORT).show();
                        } else {
                            // If sign in fails, display a message to the user.
                            Toast.makeText(register.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                        }

                        // ...
                    }
                });

    }


    public void registerOnClick(View view)
    {
        regButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                registerUser();
                insertDataDB();

            }
        });


    }

    public void insertDataDB()
    {
         String username = usernameReg.getText().toString();
         String office = officeReg.getText().toString();
         String job = roleReg.getText().toString();
         String email = emailReg.getText().toString();


        String id = databaseUsers.push().getKey();

        Users user1 = new Users(username, office, job, email);
        databaseUsers.child(id).setValue(user1);


    }

}


0 commentaires

3 Réponses :


0
votes

Modifiez les règles de sécurité comme suit:

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true
    ".write": true
  }
}


3 commentaires

Merci pour la réponse mais je les ai déjà configurés et toujours pas de chance :(


La méthode insertDataIntoDb doit être à l'intérieur de createuserwithEmailAndPassword


J'ai essayé de déplacer la méthode d'insertion Data DB ici aussi, et toujours rien: (Je suis vraiment confus quant à ce qui se passe. Un ami a son code exactement le même que le mien, et le sien semble fonctionner?



0
votes

Une fois que vous avez terminé de créer le compte à l'aide de mAuth , vous devez stocker l'emplacement des données, etc. dans Firebase.

 public void insertDataDB()
 {
        String username = usernameReg.getText().toString();
        String office = officeReg.getText().toString();
        String job = roleReg.getText().toString();
        String email = emailReg.getText().toString();
        String id = databaseUsers.push().getKey();

        Users user1 = new Users(username, office, job, email);
        databaseUsers.child(id).setValue(user1).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()){
                //Success store data in database.
                Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
            }else {
                //Something happened
                Toast.makeText(getApplicationContext(),"Error: " + task.getException().getMessage(),Toast.LENGTH_LONG).show();
            }
        }
    });
}

MISE À JOUR: Méthode Store.

//Code taken from https://firebase.google.com/docs/auth/android/start on 10/11/2019
mAuth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            // Sign in success, update UI with the signed-in user's information

        // Here we will get the user information, ex userUid (optional)
        FirebaseUser user = mAuth.getCurrentUser();

        //After that store the data before intent to next activity
        insertDataDB();

        //Then proceed to next activity
        Intent intent_signup = new Intent(register.this, home.class);
        startActivity(intent_signup);
        finish();

        Toast.makeText(register.this, "Authentication Successful!", Toast.LENGTH_SHORT).show();
    } else {
        // If sign in fails, display a message to the user.
        Toast.makeText(register.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
    }

    // ...
}
});


11 commentaires

Merci pour la réponse. Lorsque je déplace le insertData (); méthode pour être avant l'intention, je reçois toujours le même problème. L'authentification est réussie mais les détails ne sont pas stockés dans la base de données en temps réel?


@ChloeHamilton avez-vous vérifié les règles de sécurité pour la base de données en temps réel?


oui mes règles pour la base de données sont définies pour lire true et écrire true


@ChloeHamilton Je pense que cela a fait exception. ! task.isSuccessfull (). Mettez à jour votre setValue (user1) .addOnSuccessListener


Qu'est-ce que vous voulez dire? Dois-je simplement ajouter .addOnSuccessListener à la dernière ligne de la méthode insertData? - Merci :)


@ChloeHamilton vérifie ma réponse, j'ai déjà mis à jour une nouvelle réponse.


avez-vous cette erreur avant? Impossible de résoudre la dépendance externe com.google.gms: google-services: 4.2.0 car aucun référentiel n'est défini. Mon application a pu enregistrer correctement les utilisateurs et maintenant j'obtiens cette erreur et mon application ne fonctionne plus. La seule chose que j'ai changé est que j'ai utilisé l'assistant de firebase et ajouté les dépendances


@ChloeHamilton Je n'ai jamais eu cette erreur auparavant. Qu'est-ce que l'assistant Firebase? quelles dépendances avez-vous ajouté?


Je ne peux pas ouvrir mon projet maintenant. Il indique une erreur fatale lors de l'initialisation de l'interface graphique Gradle


continuons cette discussion dans le chat .


@ChloeHamilton continuer à discuter du chat



0
votes

Voici la notification que je reçois mais je n'utilise pas Cloud Firestore, j'essaie d'utiliser la base de données en temps réel


1 commentaires

@Ticherhaz c'est ce que je vois