#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 в первый раз.