我实施的Firebase交易是否正确?

时间:2018-10-10 09:50:12

标签: android firebase firebase-realtime-database transactions

我正在使用事务更新Firebase数据库中的浮点值(请参见下文)。它工作正常,除了这一次值未更新。其他一切工作都很好(您将看到await CosmosDbRepository<ApplicationProcess> .GetItemAsync(param.ProcessId) .HistorizeAsync(() => _analyseFinanciereService.ProcessAsync(), ProcessStepEnum.Application) .NotifyAsync(p => p.GetLastStep()); 中还有一个对象更新)。附带说明;对数据库中另一个子项的更新表明onComplete是正确的值。

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

我的问题是,Firebase事务的此实现是否容易出错? IOW,我执行不正确吗?

Input

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

编辑2 : 我可以这样做:

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

但是我担心的是,如果未设置更新后的值(即由于某种原因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 个答案:

没有答案