安卓 Firebase runTransaction不工作MutableData为空
我正在尝试使用Firebase数据库的runTransaction()
,但它不起作用。这是我正在使用的代码
numQuestionRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
String numQuestions = (String) mutableData.getValue();
long value = Long.parseLong(numQuestions, 16);
value++;
String incHex = Long.toHexString(value);
mutableData.setValue(incHex);
return Transaction.success(mutableData);
}
@Override
public void onComplete(FirebaseError firebaseError, boolean b, DataSnapshot dataSnapshot) {
}
});
当我按下应用程序中的一个按钮时,此代码被激活。当我启动应用程序后第一次按下按钮时,我的数据库没有改变。但当我启动应用程序后第二次按下按钮时,它会更新到下一个数字。我不明白它出了什么问题,也不明白它为什么只在第二次按下按钮时才会这样做
# 1 楼答案
您需要遵循Firebase documentation for handling transactions中使用的模式,处理事务回调中没有当前值的情况:
您需要这样做的原因是Firebase可能(而且通常会)多次执行事务回调,您需要满足这一点
runTransaction()
时,Firebase客户端将立即调用您的doTransaction()
回调,并对当前数据进行当前猜测。这通常是null
李>null
,则新值将为1
李>如果这不能解释您看到的行为,您可能需要检查哪些值被传递到
onComplete()