Не удается выполнить запись в базу данных Firebase в реальном времени с Android

#android #firebase #firebase-realtime-database

# #Android #firebase #firebase-realtime-database

Вопрос:

Я пытаюсь создать простое приложение для Android с Firebase.

На данный момент я просто пытаюсь сохранить пользователей в базе данных в реальном времени из Firebase. Но по какой-то причине это не работает. С другой стороны, аутентификация работает отлично.

Сама база данных ничего не показывает. Он всегда показывает «null»

Я следил за этим уроком YouTube и делал вещи довольно похожими.

Когда я пытаюсь создать одного пользователя и отправить его в базу данных, у меня нет ответа от запущенной программы. У меня есть индикатор выполнения, который становится невидимым, как только setValue (user) будет завершено. И эта панель прогресса никогда не становится невидимой. Просто остается там вращающимся.

Активность

 private ProgressBar progressBar;
FirebaseAuth auth = FirebaseAuth.getInstance();

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("users");

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

    progressBar = findViewById(R.id.progressBar);
    progressBar.setVisibility(View.INVISIBLE);

    registerButton = findViewById(R.id.registerButton);
    registerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            registerUser();
        }
    });
}

private void registerUser() {
    String name = nameTV.getText().toString().trim();
    String email = emailTV.getText().toString().trim();
    String pwd = pwdTV.getText().toString().trim();
    String confirmPwd = confirmPwdTV.getText().toString().trim();

    progressBar.setVisibility(View.VISIBLE);

    auth.createUserWithEmailAndPassword(email, pwd)
            .addOnCompleteListener(ActivityRegister.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        User user = new User(email, name, pwd);

                        myRef.setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    Toast.makeText(ActivityRegister.this, "User has been registered successfully", Toast.LENGTH_LONG).show();
                                    progressBar.setVisibility(View.GONE);

                                    startActivity(new Intent(ActivityRegister.this, ActivityLogin.class));
                                } else {
                                    Toast.makeText(ActivityRegister.this, "Failed to register. Try again", Toast.LENGTH_LONG).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            }
                        });
                    } else {
                        Toast.makeText(ActivityRegister.this, "Failed to register. Try again", Toast.LENGTH_LONG).show();
                        progressBar.setVisibility(View.GONE);
                    }
                }
            });

}
 

Зависимости

 implementation platform('com.google.firebase:firebase-bom:26.2.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-database:19.6.0'
 

Комментарии:

1. Пожалуйста, используйте android-studio тег только для вопросов о самой среде разработки Android Studio. Для вопросов о программировании на Android в целом используйте android тег. Это также автоматически включит подсветку синтаксиса для Java и Kotlin.

2. Вы никогда не говорили, что проверяли базу данных firebase, поэтому мне нужно спросить. А вы? У вас есть что-нибудь там написано в разделе пользователи?

3. Вы получаете какое-либо всплывающее сообщение?

4. Нет. Индикатор выполнения просто продолжает вращаться вечно. Нет тостов

Ответ №1:

Не могли бы вы добавить код для панели прогресса, пожалуйста?

Также вы должны добавить OnCompleteListener к setValue…этот вызов является задачей, поэтому, если вы хотите убедиться, что он прошел успешно, вам также следует подключить к нему слушателя.

Комментарии:

1. Просто отредактировал исходное сообщение с этим

Ответ №2:

Через некоторое время мне наконец удалось решить эту проблему.

В основном мне пришлось загружать Google-сервисы.json со страницы firebase и заменить на json в моем проекте.

Должно быть, я сделал что-то не так при настройке firebase в первый раз.