在Firestore事务的功能apply
中,我编写了DocumentSnapshot snapshot = transaction.get(xyz);
,以便获得对文档快照的引用。我想阅读其中一个字段,但在检查此字段是否包含(if(snapshot.contains("the field"))
)以及是否不为null(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
可以显示有效消息。但是还有另一种解决问题的方法吗?
答案 0 :(得分:1)
也许我可以在回调OnSuccess中使用布尔值来了解 apply的检查Contains和NotNull没有显示错误消息,因此 例如,OnSuccess可以显示validaton消息。但是 还有解决问题的方法吗?
您应该阅读passing information out of transactions上的文档。它为您提供了一种模式,用于确定您的交易成功还是失败。您应该从ejs
函数中抛出异常,以使事务正确失败。现在,您无条件返回null,这始终表示事务已成功。