gpt4 book ai didi

Android Firebase 数据库事务

转载 作者:行者123 更新时间:2023-12-02 15:06:01 25 4
gpt4 key购买 nike

  ATNRef= FirebaseDatabase.getInstance().getReference("AvailableTokenNumber");
ATNRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {

if (mutableData.getValue(int.class ) == 0){
mutableData.setValue(2);
data.tokenNo = 1;
return Transaction.success(mutableData);

}else {
data.tokenNo=mutableData.getValue(int.class);
mutableData.setValue(data.tokenNo + 1);
return Transaction.success(mutableData);
}
}

每当代码第一次运行时,data.tokenNo 的值为 0。之后,它会根据数据库值正确更新。

我无法弄清楚是什么让 data.token 的值在应用程序/代码的每次运行时 = 0。

最佳答案

您应该预期事务中可用数据的初始快照在首次执行期间可能为空。请注意 the documentation 中的这一点:

Note: Because doTransaction() is called multiple times, it must be able to handle null data. Even if there is existing data in your remote database, it may not be locally cached when the transaction function is run, resulting in null for the initial value.

也在javadoc中它说:

This method will be called, possibly multiple times, with the current data at this location.

预计您的处理程序第一次运行时,它将处理一个空数据库。然后,当已知数据(如果有)时,您也应该准备好处理这种情况。如果您不想在该位置没有数据(或未知数据)的情况下执行任何操作,只需返回一个成功的事务,而不对 mutableData 进行任何更改。

关于Android Firebase 数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com