В функции apply
моей транзакции Firestore я написал DocumentSnapshot snapshot = transaction.get(xyz);
, чтобы получить ссылку на снимок документа. Я хочу прочитать одно из полей, но прежде чем я должен проверить, содержится ли это поле (if(snapshot.contains("the field"))
) и, если оно не равно нулю (if(snapshot.getDouble("the field")) != null
). В противном случае я показываю сообщение об ошибке.
Кроме того, я написал сообщение проверки в обратном вызове OnSuccess
, которое срабатывает, если транзакция может быть запущена ( т.е.: , если apply
возвращено).
Таким образом, будет отображаться как сообщение об ошибке, так и сообщение проверки.
Ниже приведен пример:
FirebaseFirestore.getInstance().runTransaction(new Transaction.Function<Void>() {
@Override
public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException {
DocumentSnapshot snapshot = transaction.get(object_to_update);
if(snapshot.contains("amount") && snapshot.getDouble("amount") != null) {
double new_amount = snapshot.getDouble("amount") + seek_bar_value;
transaction.update(object_to_update, "amount", new_amount);
} else {
Toast.makeText(context, "Error: Unable to find a required field to process the transaction correctly.", Toast.LENGTH_SHORT).show();
}
return null;
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(context, "Error: Unable to update the data.", Toast.LENGTH_SHORT).show();
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(context, "Congratulations, the data has been updated.", Toast.LENGTH_SHORT).show();
Итак, проблема в том, что сообщение «Ошибка: невозможно найти обязательное поле для правильной обработки транзакции». и {сообщение «Поздравляем, данные обновлены». или «Ошибка: невозможно обновить данные».} оба будут показаны.
Как я мог решить эту проблему? Возможно, я мог бы использовать логическое значение в обратном вызове OnSuccess
, чтобы узнать, содержит ли проверки apply
Содержит и NotNull сообщение об ошибке, поэтому например, OnSuccess
может показать сообщение проверки. Но есть ли другой способ решить проблему?