Я пытаюсь выполнить вход в систему, используя базу данных Firebase в реальном времени.
Моя база данных заполняется, как показано ниже при регистрации:
После подписания Я хочу инициализировать пользователя publi c stati c, чтобы я мог получить его в своей основной деятельности и соответствующим образом обновить пользовательский интерфейс, но dataSnapshop объекта ValueEventListener возвращает ноль.
Вот код моего addListenerForSingleValueEvent:
currentUserReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
currentUserUsername = dataSnapshot.child("/username").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
currentUserUsername = "ERROR";
}
});
// Get every information into a User class
MainActivity.CURRENT_USER_SESSION = new User(
currentUserUsername,
user.getEmail(),
user.getUid()
);
У любого есть идея, чтобы помочь мне. Или какой-нибудь обходной путь или совет, чтобы сделать это лучше?
Редактировать: ниже приведена инициализация currentUserReference
currentUserReference = database.getReference("users/" + user.getUid());
, когда база данных инициализируется в onCreate следующим образом:
database = FirebaseDatabase.getInstance();
"пользователь", от которого я получаю Uid, - это FirebaseUser, который возвращается firebaseAuth.getCurrentUser после проверки, был ли signInWithEmailAndPassword.addOnCompleteListener успешным.
и после addListenerForSingleValueEvent я добавил Log.d, который написан следующим образом:
Log.d(TAG, "Value of variable: " + currentUserUsername);
Я ожидаю, что currentUserUsername будет иметь значение «username» в назначенной базе данных, но вместо этого , Я получаю:
LoginActivity: значение переменной: null
Edit2: во время отладки я понял, что когда отладчик достигает .addListenerForSingleValueEvent и я нажимаю F8, он полностью пропускает этот метод. Итак, как кто-то сказал в комментарии, datasnapshot, вероятно, не является нулевым, к нему никогда не осуществляется доступ. Но я до сих пор не понимаю, почему.