如何在Firestore Android中的交易中增加计数器?

时间:2019-04-09 19:48:42

标签: java android firebase google-cloud-firestore

我正在跟踪与Firebase Android文档相同的交易示例。

但是代码执行了很多次,使计数器增加了几倍,但是只需要增加一次。

final DocumentReference produtosRef = db.collection("Produtos").document(produtoSelecionado.getKey());

    db.runTransaction(new Transaction.Function<Void>() {
        @Override
        public Void apply(Transaction transaction) throws FirebaseFirestoreException {
            DocumentSnapshot snapshot = transaction.get(produtosRef);
            if(snapshot.exists()){
                Produto produto = snapshot.toObject(Produto.class);
                String key = snapshot.getId();
                Map<String, Object> childUpdates = new HashMap<>();
                childUpdates.put("quantidadeItensEstoque",produto.getQuantidadeItensEstoque() + compra_x_produto.getQuantidadeComprado());
                childUpdates.put("precoVenda", compra_x_produto.getPrecoVendaProduto());
                produtosRef.update(childUpdates);
                // Success
                return null;
            }else{
                // se nao tiver nenhum item ainda desse produto so faz o update
                String key = snapshot.getId();
                Map<String, Object> childUpdates = new HashMap<>();
                childUpdates.put("quantidadeItensEstoque",  compra_x_produto.getQuantidadeComprado());
                childUpdates.put("precoVenda", compra_x_produto.getPrecoVendaProduto());

                produtosRef.update(childUpdates);
                LoadingUtil.hideLoading();
                // 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);
                }
            });

1 个答案:

答案 0 :(得分:0)

无需使用事务来增加Cloud Firestore数据库中的计数器。您可以使用FieldValue的increment()方法来增加计数器数量,这将帮助您原子地增加值:

FieldValue.increment(yourNumber);
  

返回一个可以与set()或update()一起使用的特殊值,该值告诉服务器将字段的当前值增加给定值。