Получить данные из Firebase, но snaptshop.get возвращает ноль - PullRequest
1 голос
/ 24 мая 2019

Я действительно новичок в Firebase.Я делаю приложение для Android, которое использует FireStore в качестве базы данных.Моя проблема, когда я пытаюсь проверить, существуют ли определенные данные.Он всегда скажет, что это не так.

Это метод, в котором это происходит.

private void usernameInDatabase(final String username){

        if (registration != null)
            registration.remove();

        registration = utilizadores.addSnapshotListener(new EventListener<DocumentSnapshot>() {
            @Override public void onEvent(@Nullable DocumentSnapshot snapshot,
                                          @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w("Utilizadores", "Listen failed.", e);
                    return;
                }
                if (snapshot != null && snapshot.exists()) {
                    Log.d("Utilizadores", snapshot.getData().toString());
                    Log.d("Utilizadores", username);
                    if (snapshot.get(username) == null) {
                        loginFormState.setValue(new LoginFormState(R.string.utilizadorNaoBaseDados, null));
                        utilizadorNaBaseDados = false;
                        Log.d("Utilizadores", "Not Database :(");
                    } else {
                        utilizadorNaBaseDados = true;
                        Log.d("Utilizadores", "base de dados ;D");
                    }
                } else {
                    Log.d("Utilizadores", "Current data: null");
                }
            }
        });
    }

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

                    Log.d("Utilizadores", snapshot.getData().toString());
                    Log.d("Utilizadores", username);

Вот что я получаю в logcat:

{daniel@gmail.com= {dataNasc = Метка времени (секунды = 862182000, наносекунды = 0), почта = Даниель @gmail.com, pass =, nome = Даниэль Марко, id = danMar125}, ester@gmail.com= {dataNasc = метка времени (секунды = 902876400, наносекунды = 0), mail=ester@gmail.com, pass =, nome =Эстер Мендес, id = est124}, ola@g.co=hgjk, marcio@gmail.com= {dataNasc = метка времени (секунды = 680914800, наносекунды = 0), mail=marcio@gmail.com, pass =, nome = MárcioМаркиз, id = marMar123}, marco@gmail.com= {dataNasc = Метка времени (секунды = 923180400, наносекунд = 0), mail=marco@gmail.com, pass =, nome = Марко Антонио, id = marAnt545}, Мария @gmail.com = {dataNasc = метка времени (секунды = 877561200, наносекунды = 0), mail=maria@gmail.com, pass =, nome = Мария Антониета, id = marAnt999}}

daniel@gmail.com

Итак, я знаюБлагодаря тому, что имя пользователя, которое я ищу, находится в базе данных, и я знаю, что данные извлекаются из базы данных, но они продолжают действовать, как будто это не так.

Кто-нибудь может мне помочь, пожалуйста?

Редактировать

Это моя структура базы данных.

enter image description here

И вот как я определил утилитарные ресурсы.

  DocumentReference utilizadores = db.collection("Domum").document("Utilizador");

1 Ответ

1 голос
/ 24 мая 2019

Чтобы проверить существование пользователя в соответствии со структурой вашей базы данных, вам просто нужно использовать метод contains() для объекта Map, который возвращается document.getData(). Так в коде должно выглядеть так:

utilizadores.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Map<String, Object> map = document.getData();
                if (map.containsKey("daniel@gmail.com")) {
                    Log.d(TAG, "User exists!");
                } else {
                    Log.d(TAG, "User does not exist!");
                }
            } else {
                Log.d(TAG, "No such document");
            }
        }
    }
});

Если вам нужно получить данные в режиме реального времени, вам следует использовать addSnapshotListener(), так же, как указано выше.

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