При запросе к базе данных есть объект, но getValue () вернет ноль - PullRequest
0 голосов
/ 17 января 2019

Я сохраняю пользователя за уникальное значение в режиме реального времени, как показано на этой ссылке:

получить пользователя по электронной почте - база данных firebase

Я хочу получить пользователя по электронной почте, поэтому я пытаюсь сделать это следующим образом:

 private void getUserFromRealtimeFirebase(String email) {
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mDatabaseReference = mFirebaseDatabase.getReference().child("user");
    Query query = mDatabaseReference.orderByChild("email").equalTo(email);

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Log.i("TAG", "dataSnapshot value = " + dataSnapshot.getValue().toString());

            if (dataSnapshot.exists()) {
                Log.d("Tag", "user exists"); 
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

но я всегда получаю в обработчике обратного вызова: dataSnapshot: key = user, value = null, даже если электронная почта существует.

enter image description here enter image description here

Интересно, что не так?

1 Ответ

0 голосов
/ 20 января 2019

РЕДАКТИРОВАТЬ:

Если вы не хотите передавать userId, используйте этот запрос:

mDatabaseReference = mFirebaseDatabase.getReference();
Query query = mDatabaseReference.orderByChild("user/email").equalTo(email);

Вы пропустили идентификатор пользователяуровень.Вы должны изменить свой код на:

private void getUserFromRealtimeFirebase(String email, String userId) {
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mDatabaseReference = mFirebaseDatabase.getReference().chlid(userId).child("user");
    Query query = mDatabaseReference.orderByChild("email").equalTo(email);
...
...
}

Кстати, я хотел бы рассмотреть возможность перестройки структуры данных для - newsapp -> users -> {userId} -> {name, image, firebase-token, email....}.

Кроме того, для обратного вызова - сначала проверьте, если dataSnapshot.exists (), и только после этого используйте getValue (), даже если внутри журнала, чтобы избежать исключения нулевого указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...