- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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) {
}
});
当我在我的应用程序中按下一个按钮时,这个代码被激活。当我启动应用程序后第一次按下按钮时,我的数据库没有改变。但是当我在启动应用程序后第二次按下按钮时,它会将其更新为下一个数字。我不明白它出了什么问题,或者为什么它只在第二次按下按钮时才出现。
最佳答案
您需要遵循 Firebase documentation for handling transactions 中使用的模式并处理您的交易回调没有当前值的情况:
public Transaction.Result doTransaction(MutableData currentData) {
long value = 0;
if(currentData.getValue() != null) {
String numQuestions = (String) currentData.getValue();
value = Long.parseLong(numQuestions, 16);
}
value++;
String incHex = Long.toHexString(value);
currentData.setValue(incHex);
return Transaction.success(currentData);
}
您需要这样做的原因是 Firebase 可能(并且经常会)多次执行您的事务回调,您需要满足这一点。
runTransaction()
时,Firebase 客户端将立即调用您的 doTransaction()
回调,并使用其对当前数据的当前猜测。这通常是 null
。null
,则新值将为 1
。如果这不能解释您所看到的行为,您可能需要检查传递给 onComplete()
的值。
关于android - Firebase runTransaction 不工作 - MutableData 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500016/
我有以下 ViewModel: class SignInViewModel @Inject constructor(val api: BillingApi) : ViewModel() { v
我正在尝试使用 Firebase 数据库的 runTransaction() 但它不起作用。这是我正在使用的代码。 numQuestionRef.runTransaction(new Transact
我正在尝试使用 Firebase 数据库的 runTransaction() 但它不起作用。这是我正在使用的代码。 numQuestionRef.runTransaction(new Transact
编辑:23/10/2016:这没有解决,我仍在寻找答案。我将重写这个问题以使其更清楚,因为我现在知道是什么导致了这个问题。 编辑:2016 年 10 月 26 日:发现了一些东西: 在尝试查找问题时,
在 Swift 中,我理解 NSNumber 是包含标量数字的容器。 在 Firebase 中,您可以将 NSNumbers 发送到数据库,但不能发送 Ints。 我正在使用 Firebase Tra
我是一名优秀的程序员,十分优秀!