Я пытаюсь проверить, соответствует ли значение, сохраненное в базе данных, выбранному пользователем, если оно обновляется, в противном случае ничего не происходит.
Я пробовал следующее, нополучить исключение:
Причина: com.google.firebase.firestore.FirebaseFirestoreException: Каждый документ, прочитанный в транзакции, также должен быть написан.
Вот мой код:
//update toolbar titles if they match
final DocumentReference adminDocRef = mDbase.collection("admins").document(adminID);
mDbase.runTransaction(new Transaction.Function<Void>() {
@Override
public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException {
DocumentSnapshot adminSnapshot = transaction.get(adminDocRef);
String toolbarTitle = adminSnapshot.getString("displayedUser");
if (userName.equals(toolbarTitle)) {
transaction.update(adminDocRef, "displayedUser", userName);
}
// Success
return null;
}
})
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "Transaction success!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Transaction failure.", e);
}
});
Могут ли транзакции быть условными?Если нет, то как бы вы решили эту проблему?Кажется глупым делать отдельное получение, а затем вкладывать в него обновление.
Любая помощь будет принята с благодарностью.
Спасибо!