Firestore:检查事务中的NotNull并阻止调用OnSuccessful回调

时间:2019-05-10 21:51:06

标签: android google-cloud-firestore

在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可以显示有效消息。但是还有另一种解决问题的方法吗?

1 个答案:

答案 0 :(得分:1)

  

也许我可以在回调OnSuccess中使用布尔值来了解   apply的检查Contains和NotNull没有显示错误消息,因此   例如,OnSuccess可以显示validaton消息。但是   还有解决问题的方法吗?

您应该阅读passing information out of transactions上的文档。它为您提供了一种模式,用于确定您的交易成功还是失败。您应该从ejs函数中抛出异常,以使事务正确失败。现在,您无条件返回null,这始终表示事务已成功。