java - 将增量子名添加到firebase,然后向其中添加数组
问题描述
除了我之前的问题:Firebase 事务返回 ArrayList 处理
我仍然无法添加具有增量 ID 的子节点,我已经尝试使用这篇文章中的解决方案:Android studio value increment in Firebase
我最大的努力是:
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"
} ]
},
解决方案
感谢@Frank van Puffelen 的建议,我没有使用 Transaction,而是使用 Firebase 内置的 push() 函数。
public void onClick(View view) {
Date c = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);
mDatabase.child("history").child(user.getUid()).push().setValue(new PlanHistory(formattedDate, plan.getPlan_key(), plan.getPlan_name(), plan.getLevel_name(), plan.getType_name(), plan.getPersonal_trainer_id(), plan.getUri()));
}
虽然它不是增量值而是生成的推送键,但它仍然满足我的需求。
使用 push() 的 json 树:
"history" : {
"CgLSsYAk2Tel8A8FSPLA5rBH8ZG2" : {
"-MOdgaP_SBTQ2xXmn6au" : {
"date" : "16-Dec-2020",
"level_name" : "Easy",
"personal_trainer_id" : "aHb1vJ8JmBTuO7TArx4ehVeDbJJ2",
"plan_key" : "Plan3",
"plan_name" : "Abs Fat Reduction",
"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"
},
"-MOdgbpKBfFxjpPVR2JD" : {
"date" : "16-Dec-2020",
"level_name" : "Medium",
"personal_trainer_id" : "aHb1vJ8JmBTuO7TArx4ehVeDbJJ2",
"plan_key" : "Plan9",
"plan_name" : "Form the Abdominal Muscle",
"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"
},
"-MOdgmYMUIIZo0hasON_" : {
"date" : "16-Dec-2020",
"level_name" : "Body Builder",
"personal_trainer_id" : "aHb1vJ8JmBTuO7TArx4ehVeDbJJ2",
"plan_key" : "Plan4",
"plan_name" : "Hercules Excercise",
"type_name" : "Full body",
"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"
}
}
},
推荐阅读
- azure - 如何为多个 Http 请求(如 POST、GET 等)创建单个逻辑应用程序
- python - 使用元素树遍历 XML 并更新列表中的文本
- c# - 当您使用 UNNEST 在 UniVerse 数据库上执行 SELECT 时,可以在条件中组合 SIMPLE 值和 MULTIVALUE
- sql - 从 HTML 图像标签 (img) 中的源 (src) 属性中提取路径
- hibernate - 使用Envers,如何查询历史数据,在查询的父表修订中不丢失子实体数据?
- c# - 为 UWP 应用程序连接 NavigationView 中的后退按钮
- java - 如何通过 ubuntu 终端将 .txt 中写入的参数传递给 java 程序?
- graphics - 如何检查 ID3D12GraphicsCommandList 是否已关闭?
- arrays - 如何删除二维数组中的相似数组?
- node.js - Mongoose 更新或插入许多文档