Проверьте значение на Firebase и начните конкретную деятельность

# #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. Я попробовал, но случилось то же самое 🙁