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 ...
// 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)
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!