我正在使用一个事务来更新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