我正在使用事务更新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
),那么事务将不会看到未更新值的返回吗?用户希望将其设置为数据库的方式,因此不会更改值并成功结束吗?