代码之家  ›  专栏  ›  技术社区  ›  Christopher Mills

我对Firebase事务的实现是否正确?

  •  0
  • Christopher Mills  · 技术社区  · 7 年前

    我正在使用一个事务来更新Firebase数据库中的浮点值(见下文)。它工作正常,只是有一次值没有更新。其他一切都很好地工作(您将看到在 onComplete Input 是正确的值。

    我无法重新创建这个,也无法在日志中找到与此特定事务相关的任何内容。

    我的问题是,Firebase事务的这个实现看起来容易出错吗。瞧,我是不是执行错了?

        private void onInboundTransactionConfirm(DatabaseReference piclCount) {
                piclCount.runTransaction(new Transaction.Handler() {
                    @Override
                    public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                        float P = mutableData.getValue(Float.class);
    
                            // Set value and report transaction success
                            mutableData.setValue(P + Input);
    
                        return Transaction.success(mutableData);
                    }
    
                    @Override
                    public void onComplete(DatabaseError databaseError, boolean b,
                                           DataSnapshot dataSnapshot) {
    
                        String transKey = transactionRef.child(recipientId).push().getKey();
    
                        TransactionRecord inbound = new TransactionRecord("Transfer", Input, userDirectCode, UserName);
    transactionRef.child(recipientId).child(transKey).setValue(inbound);                 
                        // TransactionRecord completed
                        Log.d(TAG, "postInboundTransaction:onComplete:" + databaseError);
                    }
                });
            }
    

    float P = mutableData.getValue(Float.class); :

    Unboxing of 'mutableData.getValue(Float.class)' may produce 'java.lang.NullPointerException'

    编辑2 : 我可以这样做:

    public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                    float P = mutableData.getValue(Float.class);
    
                    if (Input != 0) {
                        // Set value and report transaction success
                        mutableData.setValue(P + Input);
                    }
    
                    return Transaction.success(mutableData);
                }
    

    但我担心的是,如果更新后的值没有得到设置(即出于某种原因 输入 等于 0

    0 回复  |  直到 7 年前