【问题标题】:Firebase transaction returns ArrayList handlingFirebase 事务返回 ArrayList 处理
【发布时间】:2021-03-26 02:25:18
【问题描述】:

我正在尝试检查一个孩子是否已经有一个值,如果没有,则增加一个孩子值并在孩子内部添加一个数据数组。例如:

并期望代码将添加第二个孩子“2”:

为此,我使用 doTransaction 检查 history/userId 值中是否有任何值,

Date c = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);
PlanHistory planHistory = new PlanHistory(formattedDate, plan.getPlan_key(), plan.getPlan_name(), plan.getLevel_name(), plan.getType_name(), plan.getPersonal_trainer_id(), plan.getUri());
mDatabase.child("history").child(user.getUid()).runTransaction(new Transaction.Handler() {
    @NonNull
    @Override
    public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
        long value = 0;
        if(mutableData.getValue() != null) {
            String numQuestions = (String) mutableData.getValue();
            value = Long.parseLong(numQuestions, 16);
        }
        value++;
        String incHex = Long.toHexString(value);
        mutableData.setValue(incHex);
        mutableData.child(incHex).setValue(planHistory);
        return Transaction.success(mutableData);
    }

    @Override
    public void onComplete(@Nullable DatabaseError error, boolean committed, @Nullable DataSnapshot currentData) {

    }
});

问题出在子节点内部已经有值时,它返回ArrayList并且不能强制转换为String

如何修复代码,以便它可以添加下一个节点,其子名称从前一个节点增加,就像预期的结果一样?

【问题讨论】:

    标签: java firebase android-studio firebase-realtime-database


    【解决方案1】:

    当您拨打此电话时:

    String numQuestions = (String) mutableData.getValue();
    

    您获得MutableData 对象的值,该对象包含数据库中mDatabase.child("history").child(user.getUid()) 下的所有数据。所以这比单个字符串要多得多。我的猜测是您正在寻找:

    String numQuestions = (String) mutableData.getKey();
    

    【讨论】:

    • 现在当它已经有一个值时,键仍然返回 null 而它应该返回 1
    • 如果原来的问题/错误消失了,这意味着这是一个新问题。您可能希望在调试器中单步执行代码以了解发生这种情况的原因,请记住,即使数据库中有数据,最初使用空快照调用 doTransaction 也是正常的。
    • 啊,我明白了,好吧,我会问一个新问题!谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2020-08-17
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多