#android #firebase #firebase-realtime-database #firebase-authentication #android-manifest
# #Android #firebase #firebase-realtime-database #firebase-аутентификация #android-манифест
Вопрос:
Это функция registerUser, которую я создал. Если вы можете видеть там, я сделал все, что нужно для сохранения значения в базе данных, получая ссылку и экземпляры базы данных firebase, а также устанавливая значение с помощью метода setValue() и передавая пользовательский объект класса конструктора User. Я не знаю, где я ошибся. пожалуйста, помогите, это было бы действительно заметно. Это мой Java-код для регистрации пользователя и сохранения в базе данных Firebase
private void registerUser()
{
String Email=nEmail.getText().toString().trim();
String password=npassword.getText().toString().trim();
String Username=nFullName.getText().toString().trim();
String Phone=nphone.getText().toString().trim();
if(Username.isEmpty()) {
nFullName.setError("Name is required");
nFullName.requestFocus();
return;
}
if(Email.isEmpty()) {
nEmail.setError("Email is required");
nEmail.requestFocus();
return;
}
if(!Patterns.EMAIL_ADDRESS.matcher(Email).matches()){
nEmail.setError("please provide valid email");
nEmail.requestFocus();
return;
}
if(password.isEmpty()) {
npassword.setError("password is required");
npassword.requestFocus();
return;
}
if(password.length() < 6)
{
npassword.setError("password must be 6 chracters long");
npassword.requestFocus();
return;
}
if(Phone.isEmpty()) {
nphone.setError("Phone is required");
nphone.requestFocus();
return;
}
progressBar.setVisibility(View.VISIBLE);
mAuth.createUserWithEmailAndPassword(Email,password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{
String Email=nEmail.getText().toString().trim();
String Username=nFullName.getText().toString().trim();
String Phone=nphone.getText().toString().trim();
Users user=new Users(Username,Phone,Email);
FirebaseDatabase.getInstance().getReference("Users")
.child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(activity_register.this,"User Has been Successfully registered",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
else
{
Toast.makeText(activity_register.this,"Failed..... :(",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
else
{
Toast.makeText(activity_register.this,"Failed..... :(",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
}
также предложите мне какую-либо зависимость, если это требуется для работы.
Ответ №1:
Я думаю, что решение вашей проблемы заключается в том, чтобы использовать FirebaseDatabase по-другому. Problem
: Вы вызываете метод «getReference» и инициализируете его строковым значением: «Пользователи».
Вместо:
FirebaseDatabase.getInstance().getReference("Users")
.child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
попробуйте это:
FirebaseDatabase var1 = FirebaseDatabase.getInstance();
DatabaseReference userRef = var1.getReference().child("Users");
FirebaseAuth auth = FirebaseAuth.getInstance();
userRef = userRef.child(auth.getCurrentUser()).getUid());
userRef.setValue("your string").addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{System.out.print("Now it works!")
}
}
});
Метод setValue требует строкового значения (часто).
Пожалуйста, не помещайте класс, подобный вашему классу Users, в метод setValue.
Если вы хотите сохранить более одной строки данных для пользователя, вы можете просто добавить еще один .child(«DataStringName») за корнем пользователя.
Пример для имени пользователя и обычного имени:
FirebaseDatabase var1 = FirebaseDatabase.getInstance();
DatabaseReference userRef = var1.getReference().child("Users");
FirebaseAuth auth = FirebaseAuth.getInstance();
userRef = userRef.child(auth.getCurrentUser()).getUid());
DatabaseReference usernameRef = userRef.child("username");
DatabaseReference nameRef = userRef.child("name");
usernameRef.setValue("Username").addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{System.out.print("Username is uploaded!")
}
}
});
nameRef.setValue("Name").addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{System.out.print("Name is uploaded!")
}
}
});
Я надеюсь, что этот ответ поможет вам!
С наилучшими пожеланиями!
Комментарии:
1. Но проблема не во второй задаче.isSuccessful() . именно в first task.isSuccessful(), где создается MAuth.createUserWithEmailAndPassword(Email, password), по какой-то причине не завершен
2. Хорошо, я сделаю новый ответ
Ответ №2:
Итак, ваш код для создания учетной записи верен.
Есть несколько вещей, о которых вам следует позаботиться:
- Вы включили функцию электронной почты / пароля в аутентификации Firebase (Firebase)
- Вы следовали инструкциям для Android?
Пожалуйста, покажите мне журнал с ответом об ошибке или любым ответом firebase. Я уверен, что ответ будет!