Я борюсь с супер простой транзакцией. Всегда происходит сбой с сообщением «Транзакция завершилась неудачей при всех повторных попытках», но нет сообщений об ошибках, кроме этого на logcat
.
Когда я отлаживаю его, я вижу, что он повторяется несколько раз. Я действительно не знаю почему, поскольку другие транзакции выполняются без проблем.
Я просто хочу клонировать один документ из одной коллекции в другую. Думайте от "videos
" до "favorites
" (я знаю, что это может быть сделано вне транзакции, как указывает @Alex, но это только неудачная часть, реальная транзакция длиннее)
private void copy(
final DocumentReference SOURCEDOCREF,
final CollectionReference TARGETCOLREF) {
Transaction.Function<? extends Void> transaction = new Transaction.Function<Void>() {
@Nullable
@Override
public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException {
DocumentSnapshot doc = transaction.get(SOURCEDOCREF);
if (doc.exists()) {
DocumentReference favoriteRef = TARGETCOLREF.document("FV_" + doc.getId());
Map<String, Object> data = doc.getData();
transaction.set(favoriteRef, data);
return null;
// NOTE: This is reached, ie. the source doc exists
// the data recovered, and set into the transaction.
} else
throw new FirebaseFirestoreException("Item does not exist", FirebaseFirestoreException.Code.NOT_FOUND);
}
};
setMode(MODE_SPLASH);
FirebaseFirestore.getInstance().runTransaction(transaction)
.addOnSuccessListener(
(Activity) getContext(),
new OnSuccessListener<Object>() {
@Override
public void onSuccess(Object aVoid) {
setMode(MODE_FOLLOW);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
hide();
DialogHelper.customToast(getContext(), e.getMessage());
}
});
}