首页 > 解决方案 > 将增量子名添加到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"
} ]
 },

标签: javaandroidfirebasefirebase-realtime-database

解决方案


感谢@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"
  }
}

},


推荐阅读