firestore, где я всегда получаю, возвращает true

#java #android #google-cloud-firestore

#java #Android #google-облако-firestore

Вопрос:

Я хочу установить прослушиватель в моей базе данных firestore.

Я хочу прослушать значение с именем isConfirmClicked и в случае, если оно равно 1, я хочу знать об этом.

Я использую следующее:

 db.collection( "Users" ).document( NotMyID ).collection( "MyChats" ).whereEqualTo( "isConfirmClicked" , 1 ).addSnapshotListener( new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot value,
                        @Nullable FirebaseFirestoreException e) {
        if (e != null) {
            return;
        }

        DO SOMETHING HERE
        
    }
} );
  

По какой-то причине оно всегда попадает в DO SOMETHING HERE , даже когда наверняка isConfirmClicked равно 0.

введите описание изображения здесь

Есть ли какая-либо причина для этого?

Ответ №1:

Предоставленный вами прослушиватель будет вызываться всякий раз, когда результаты известны из запроса, даже если нет подходящих документов. Если вы хотите знать, есть ли соответствующие документы для вашего запроса, вам нужно будет проверить предоставленный QuerySnapshot с помощью его метода isEmpty().

 @Override
public void onEvent(@Nullable QuerySnapshot querySnapshot,
                    @Nullable FirebaseFirestoreException e) {
    if (e != null) {
        return;
    }

    if (!querySnapshot.isEmpty()) {
        // here, there is at least one document that matches the query
    }        
}
  

Или вы можете проверить, querySnapshot.size() > 0.