android - 我对 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
),那么事务是否不会将未更新的值返回到数据库中,因为用户希望它被设置到,因此不改变价值并成功结束?
解决方案
推荐阅读
- reactjs - 通过 List 调用未找到新插入的记录
- reactjs - 底部导航栏动画
- python - Python中的接口
- oracle-apex - Oracle Apex 同一页面上的多个授权
- javascript - 正则表达式验证asp.net数据注释中格式化货币的最小值
- ios - 将特定元素从可编码类数组映射到数组
- azure - Azure 中的 Databricks:增量表的集群性能比较
- css - 在表格列内弹出
- javascript - 对象作为 React 子对象无效(找到:带有键 {} 的对象)。在本地机器(chrome浏览器)中工作,但不在生产和其他浏览器中工作
- javascript - react项目制作的脚本文件如何将静态html变成动态应用程序?