Как я могу запросить только определенные документы из группы коллекции пожарного депо, основываясь на значении поля? - PullRequest
0 голосов
/ 02 марта 2020

Итак, у меня есть база данных firestore, в которой хранятся мои пользователи и их сообщения. Сообщения имеют это логическое поле «Доступно», которое я хочу использовать, чтобы выбрать, какие сообщения будут отображаться на моей панели инструментов. Я использую collectionGroup для запроса всех сообщений, но при попытке проверить, является ли поле «доступно» «истинным» или «ложным» с помощью .whereEqualTo («доступный», «истинный»)), мое приложение запускается, но панель управления не загрузить любой из сообщений и показывает тост, говоря "документ не найден". Это мой код:


    private void homePostsRetriever(Context context) {
        String userId = FirebaseAuth.getInstance().getCurrentUser() != null ? FirebaseAuth.getInstance().getCurrentUser().getUid() : null;

        if (userId == null || userId.isEmpty()) {
            Toast.makeText(context, "No user id", Toast.LENGTH_SHORT).show();
            return;
        }

        FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
        rootRef.collectionGroup("posts").whereEqualTo("available", "true").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot documentSnapshots) {
                for (DocumentSnapshot documentSnapshot : documentSnapshots.getDocuments()) {
                    Post post = new Post();
                    post.setTitle(documentSnapshot.getString("title"));
                    post.setDescription(documentSnapshot.getString("description"));

                    list.add(post);
                }
                notifyDataSetChanged();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(context, "No document found", Toast.LENGTH_SHORT).show();
            }
        });
    }

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

Это структура базы данных:

user1 - post1 - postOwner(String) - 'Ted'
              - postTitle(String) - 'Hello everybody'
              - **available**(Boolean) - '**true**'

      - post2 - postOwner(String) - 'Ted'
              - postTitle(String) - 'Afsadf asdfasdf'
              - **available**(Boolean) - 'false'

user2 - post1 - postOwner(String) - 'John'
              - postTitle(String) - 'Dasdas asdfasf'
              - **available**(Boolean) - '**true**'

      - post2 - postOwner(String) - 'John'
              - postTitle(String) - 'Fasd dasdwef'
              - **available**(Boolean) - 'false'
      - post3 - postOwner(String) - 'John'
              - postTitle(String) - 'TRfdsaf fasdfar'
              - **available**(Boolean) - 'false'


ОБНОВЛЕНИЕ: я добавил базу данных Я изменил код с "true" на true, используя .whereEqualTo ("available", true ) но я получаю тот же результат. Пост не загружен ..

ОБНОВЛЕНИЕ2: Я добавил код img, чтобы быть понятным

1 Ответ

0 голосов
/ 02 марта 2020

Тип поля должен совпадать как для клиента, так и для сервера. Здесь недостаточно информации, чтобы сказать наверняка (скриншот был бы лучше), но ваш запрос запрашивает документы, в поле «available» которых установлена ​​точная строка «true». Обратите внимание, что он запрашивает строку, а не логическое значение. Если ваши документы на самом деле содержат значения логических полей, они не будут найдены запросом, потому что типы не совпадают.

Если поле документа «доступное» на самом деле содержит логические значения вместо строки, вы должны передать логическое значение для запроса вместо строки, подобной этой:

whereEqualTo("available", true)

Не , как вы сейчас, со строковым значением:

whereEqualTo("available", "true")  // the quotes around "true" make it a string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...