Итак, у меня есть база данных 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, чтобы быть понятным