Cómo estructurar escribir datos de usuario en la base de datos Firebase en tiempo real?

athan:

Así que soy nuevo en Android Studio y base de fuego y yo estoy haciendo una aplicación para Android, donde se me requiere para crear roles de usuario para ver las diferentes características de la aplicación (cliente y entrenador). Sé que esto no está disponible a través de la autenticación de base de fuego, así que estaba previsto para insertar los datos del usuario en la base de datos y / asignar funciones de acceso desde allí. Estoy tratando de hacer que la base de datos algo como esto ...

¿Cómo estoy tratando de estructurar la base de datos en tiempo real (agregado manualmente a la base de datos)

// Donde 'User1Email' puede ser o bien de correo electrónico del usuario o ID de usuario (ya que creo que no se puede incluir en la base de datos @)

Sin embargo mi código parece estar chocando la aplicación. La forma en que he tratado de introducir los datos en mi aspecto de archivos .java como este ..

//ESTABLISH THE CONNECTIONS TO DATABASE AND GET TE USER ID
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        String uid = user.getUid();
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        final DatabaseReference mRef = database.getReference("users");


        EditText emailField = findViewById(R.id.email);
        EditText passwordField = findViewById(R.id.password);

        //Get email and password from text views
        final String email = emailField.getText().toString();
        final String password = passwordField.getText().toString();

         mRef.child("password").setValue(password);
         mRef.child("role").setValue("Trainer");

// I DID ALSO TRY THIS BUT UID STAYS UNDERLINED RED-  mRef.child(uid).child("password").setValue(password);

ERROR:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.finalyearapp, PID: 13903
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
        at android.view.View.performClick(View.java:6597) 
        at android.view.View.performClickInternal(View.java:6574) 
        at android.view.View.access$3100(View.java:778) 
        at android.view.View$PerformClick.run(View.java:25885) 
        at android.os.Handler.handleCallback(Handler.java:873) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
        at com.example.finalyearapp.SignUpActivity.onClick(SignUpActivity.java:53)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) 
        at android.view.View.performClick(View.java:6597) 
        at android.view.View.performClickInternal(View.java:6574) 
        at android.view.View.access$3100(View.java:778) 
        at android.view.View$PerformClick.run(View.java:25885) 
        at android.os.Handler.handleCallback(Handler.java:873) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
Gabriel 14:

Debe autenticar un usuario antes de llegar a su instancia.

Para asegurarse de que el usuario se registra antes de hacer nada, llamada de getCurrentUser()método en el createUserWithEmailAndPassword()(si está utilizando el correo electrónico y la contraseña de autenticación).

En primer lugar crear e inicializar un objeto Firebase de autorización:

FirebaseAuth mAuth = FirebaseAuth.getInstance();

A continuación, cuando se desea inscribirse (se supone con un botón) llamado createUserWithEmailAndPassword()método:

mAuth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                //Successfully created user
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                String uid = user.getUid();
                FirebaseDatabase database = FirebaseDatabase.getInstance();
                final DatabaseReference mRef = database.getReference("users");


                EditText emailField = findViewById(R.id.email);

                //Get email from EditText
                final String email = emailField.getText().toString();

                mRef.child("role").setValue("Trainer");
            } else {
                //User not created,

                //Print exception
                Log.e("Sign up", task.getException().getMessage())

                //Write your code to handle user creation fail
            }
        }
    });

Si desea obtener más información de autenticación Firebase, mira aquí

Recuerde que esta solución sólo es para la creación de usuarios.

¡Espero eso ayude! Deje un comentario sobre una explicación más detallada o si tiene otra pregunta!

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=338350&siteId=1
Recomendado
Clasificación