首页 > 解决方案 > 我对 Firebase 事务的实施是否正确?

问题描述

我正在使用事务来更新我的 Firebase 数据库中的浮点值(见下文)。它工作正常,除了这个值没有更新的时候。其他一切都运行良好(您会看到 中还有一个对象更新onComplete)。附带说明;对数据库中另一个孩子的更新表明这Input是正确的值。

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

我的问题是,Firebase 事务的这种实现看起来是否容易出错。IOW,我是否执行不正确?

    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);
                }
            });
        }

编辑 1: 此行附加以下警告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);
            }

但我担心的是,如果更新的值没有被设置(即由于某种原因Input等于0),那么事务是否不会将未更新的值返回到数据库中,因为用户希望它被设置到,因此不改变价值并成功结束?

标签: androidfirebasefirebase-realtime-databasetransactions

解决方案


推荐阅读