除了我前面的问题:firebase事务返回arraylist处理
我仍然无法添加具有增量id的子节点,我已经尝试使用本文中的解决方案:firebase中的android studio value increment
我最大的努力是:
mDatabase.child("history").child(user.getUid()).runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
Log.i("HISTORY", "List length: "+ mutableData.getKey());
long value = 0;
if(mutableData.getKey() != null) {
String numRecords = (String) mutableData.getKey();
value = Long.parseLong(numRecords, 16);
}
value++;
incHex = Long.toHexString(value);
mutableData.setValue(incHex);
return Transaction.success(mutableData);
}
@Override
public void onComplete(@Nullable DatabaseError error, boolean committed, @Nullable DataSnapshot currentData) {
Log.i("HISTORY", "List length: "+ currentData.getKey());
mDatabase.child("history").child(user.getUid()).child(incHex).setValue(planHistory);
}
});
但它只是更新子id 1的值,而不是添加子id 2并为其添加值。
如何添加增量子id并在其上放置数组?
编辑:这是json树:
"history" : {
"CgLSsYAk2Tel8A8FSPLA5rBH8ZG2" : [ null, {
"date" : "16-Dec-2020",
"level_name" : "Body Builder",
"personal_trainer_id" : "aHb1vJ8JmBTuO7TArx4ehVeDbJJ2",
"plan_key" : "Plan6",
"plan_name" : "Perfect Abdominal Muscles ",
"type_name" : "Abs",
"uri" : "https://firebasestorage.googleapis.com/v0/b/zahfit-s-mobile-app.appspot.com/o/exercise_plan%2Fmotiontoburn.jpg?alt=media&token=bd5ebb02-f9fb-48bf-880f-a1724c5b38ee"
} ]
},
2条答案
按热度按时间eufgjt7s1#
当您在某个位置运行事务时,您将获得该位置的所有数据,并且必须告诉数据库在写操作之后该位置需要存在的所有数据。
自从你读了
/history/$uid
,您将从该位置获取所有数据,并且需要确保MutableData
返回包含的所有数据/history/$uid
我也是。通过呼叫mutableData.setValue(incHex)
,你在告诉数据库替换当前存在于/history/$uid
使用新的增量值。更可能的情况是,你会想做如下事情:
0aydgbwb2#
感谢@frank van puffelen的建议,我没有使用事务,而是使用firebase内置的push()函数。
虽然不是递增值而是生成的按键,但它仍然满足了我的需求。
使用push()的json树:
},