Я заметил, что поле MetaData DocumentSnapshot hasPendingWrites == true, а метаданные Parent QueryDocumentSnapshot hasPendingWrites = false в Android Firestore SDK при использовании обновления запросов в режиме реального времени.Это странно, потому что я хочу проверить, имеет ли отдельный DocumentSnapshot ожидающие записи в любой момент, когда есть изменение документа.
listenerRegistration = FirestoreUtils.getMessagesCollection(chatId)
.addSnapshotListener(MetadataChanges.INCLUDE) { snapshot, exception ->
if (exception != null) {
Timber.w("An error occurred while trying to load messages: $exception")
return@addSnapshotListener
}
Timber.d("Snapshot Meta: ${snapshot?.metadata}")
snapshot?.documentChanges?.forEach { doChanges ->
when (doChanges.type) {
DocumentChange.Type.ADDED -> {
Timber.d("Doc Added: ${doChanges.document}")
}
DocumentChange.Type.MODIFIED -> {
Timber.d("Doc Modified: ${doChanges.document}")
}
DocumentChange.Type.REMOVED -> {
Timber.d("Doc Removed: ${doChanges.document}")
}
}
}
Из-за этой добавленной опции: MetadataChanges.INCLUDE
, событие изменения метаданных также запускается с использованиемВ журналах вы можете видеть, что журнал out перед циклом foreach имеет значение false, в то время как отдельные документы QueryDocumentSnapshot haspendingWrites имеют значение true.
Таким образом, вопрос в том, почему событие мета изменений не вызывает изменения документа?Есть ли способ узнать, какой документ вызвал изменения метаданных?