Firebase не хранит данные. Проект успешно собран без ошибок в Logcat

#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:

Итак, ваш код для создания учетной записи верен.

Есть несколько вещей, о которых вам следует позаботиться:

  1. Вы включили функцию электронной почты / пароля в аутентификации Firebase (Firebase)
  2. Вы следовали инструкциям для Android?

Пожалуйста, покажите мне журнал с ответом об ошибке или любым ответом firebase. Я уверен, что ответ будет!