#android #firebase #google-cloud-firestore
#Android #firebase #google-облако-firestore
Вопрос:
Вот код, который мы можем использовать, чтобы узнать, добавлен, изменен или удален документ:
db.collection("cities")
.whereEqualTo("state", "CA")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot snapshots,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "listen:error", e);
return;
}
for (DocumentChange dc : snapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
Log.d(TAG, "New city: " dc.getDocument().getData());
break;
case MODIFIED:
Log.d(TAG, "Modified city: " dc.getDocument().getData());
break;
case REMOVED:
Log.d(TAG, "Removed city: " dc.getDocument().getData());
break;
}
}
}
});
Есть ли способ для клиента узнать, удалил ли другой клиент поле внутри документа?
Ответ №1:
Firestore SDK не предоставляет прямого способа обнаружить эту ситуацию. Вам нужно будет написать код для сравнения предыдущего снимка с новым снимком, чтобы увидеть, были ли добавлены, изменены или удалены какие-либо поля. Ваше решение должно будет:
- Сохраните снимок запроса из последнего вызова вашего прослушивателя и сравните его с текущим снимком
- Повторите каждый новый DocumentSnapshot, содержащийся в QuerySnapshot, и найдите соответствующий предыдущий DocumentSnapshot из сохраненного QuerySnapshot.
- Отделите
Map<String, Object>
от данных текущего и предыдущего DocumentSnapshot, чтобы найти конкретное изменение
Очевидно, что это нетривиальный объем кода, и он будет сильно зависеть от фактических данных поля, которые вы хотите сравнить.