# #java #firebase #android-studio #firebase-realtime-database #android-activity
Вопрос:
Контекст:
В своей основной деятельности я пытаюсь проверить, существует ли значение в базе данных Firebase, если оно существует, оно показывает домашнюю активность, но если оно не существует, оно будет делать что-то другое. Я имею в виду, что в методе OnStart () перед отображением основной активности и отображением ее пользователю проверяется условие. И если условие верно, то пользователю никогда не следует показывать основную активность, а отображается домашняя активность.
Проблема:
Я не знаю, почему это происходит, но, если значение СУЩЕСТВУЕТ в базе данных firebase, моя основная активность отображается несколько секунд, а затем отображается домашняя активность. И что должно произойти, как указано выше, так это то, что домашняя активность отображается непосредственно пользователю. Я думаю, что addListenerForSingleValueEvent
проблема здесь в методе, но я не знаю, почему.
Код:
@Override
protected void onStart() {
super.onStart();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users").child("Person").child(mAuth.getCurrentUser().getUid());
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
if(data.exists()){
Intent intent = new Intent (MainActivity.this, HomeActivity.class);
startActivity(intent);
MainActivity.this.finish();
}else{
FirebaseUser user = mAuth.getCurrentUser();
if(user!=null){
Intent intent = new Intent(MainActivity.this, RegistrarseActivity.class);
startActivity(intent);
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
Комментарии:
1. Это неблокирующее решение, прослушиватель всегда будет добавлен в очередь выполнения, и он не будет ждать, пока он завершится, и вызовет
onCreate
функцию. Вы можете поместить этот код вonCreate
метод перед отображением файла макета, чтобы он был выполнен первым.2. Я попробовал, но случилось то же самое 🙁