【发布时间】:2018-04-27 14:37:55
【问题描述】:
我正在为一个超级简单的交易而苦苦挣扎。它总是失败并显示“Transaction failed all retries”消息,但除了 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());
}
});
}
【问题讨论】:
标签: java android firebase google-cloud-firestore