先進大家好
我想請問如何用firebase的runTransaction
同時更新兩個節點的資料
final DatabaseReference mRef =
FirebaseDatabase.getInstance().getReference("User/Users/" + uid +"/life");
mRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() != null) {
long life = (Long) mutableData.getValue();
mutableData.setValue(life + 1);
}
return Transaction.success(mutableData);
}
以上是只更新一個節點時的方法
但是現在我想做一個交易的動作,需要同時更新兩個節點
避免操作失敗時,資料跑掉
我嘗試將以上程式碼修改成以下
final DatabaseReference mRef =
FirebaseDatabase.getInstance().getReference("User/Users/" + uid);
mRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.child("life")getValue() != null &&
mutableData.child("point")getValue() != null ) {
long life = (Long) mutableData.child("life").getValue();
long point = (Long) mutableData.child("point").getValue();
mutableData.child("point").setValue(point - 1);
mutableData.child("life").setValue(life + 1);
}
return Transaction.success(mutableData);
}
但是行不通,結果會將整個uid節點蓋掉刪除...
請問這種情況該怎麼寫 ?