我想使用Firebase数据库功能之一 - Transaction。为简单起见,我想说如果存在则要更新记录,如果不存在则创建新记录。
代码看起来像这样:
ref.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() == null) {
// create new data
} else {
// update new data
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean committed,
DataSnapshot dataSnapshot) {
}
});
但Firebase文档中存在一个问题:
因为doTransaction()被多次调用,所以它必须能够处理空数据。即使远程数据库中存在现有数据,当运行事务函数时,它也可能不会在本地缓存,导致初始值为null。
所以有一次我将mutableData.getValue()作为null然后我应该创建新数据,但实际上它是null,因为Firebase还没有缓存它。
我如何区分这两种情况?