You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase RTDB Unity:RunTransaction始终返回Null的问题求助

解决Firebase RTDB事务中MutableData始终为Null的问题

核心问题分析

你的代码存在两个关键错误:

  • 数据类型不匹配:你尝试将total_users节点的值转换为List<object>,但实际该节点存储的是单个数值(int类型),强制类型转换失败导致返回null。
  • 默认值设置错误:你给mutableData.Value赋值了一个包含total_users键的字典,但当前事务操作的节点就是total_users本身,这会导致该节点被替换成字典结构,而非预期的数值。

修正后的代码实现

事务调用代码(无需修改,保持原有逻辑)

db_reference
.Child("total_users")
.RunTransaction(RunTransaction)
.ContinueWithOnMainThread(task => {
    if (task.Exception != null) {
        Debug.Log("Transaction exception: " + task.Exception);
    } else if (task.IsCompleted) {
        Debug.Log("Transaction complete.");
    }
});

事务处理方法(核心修正)

TransactionResult RunTransaction(MutableData mutableData) {
    // 尝试将节点值转换为可空整数(匹配实际存储类型)
    int? currentValue = mutableData.Value as int?;

    if (currentValue != null) {
        // 数值存在,执行递增操作
        mutableData.Value = currentValue + 1;
        Debug.Log("Incremented total_users to: " + mutableData.Value);
    } else {
        // 数值不存在,设置默认值为1(直接赋值,无需字典)
        mutableData.Value = 1;
        Debug.Log("Set initial total_users to 1");
    }

    return TransactionResult.Success(mutableData);
}

额外排查要点

  • 数据库规则验证:确保RTDB的安全规则允许事务的读/写操作,测试阶段可临时使用宽松规则(上线前务必修改为严格规则):
    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    
  • Firebase初始化检查:确认在调用事务前,FirebaseApp已完成初始化(通常在启动时调用FirebaseApp.CheckAndFixDependenciesAsync())。
  • 节点路径确认:检查db_reference是否指向正确的根节点,确保Child("total_users")路径与数据库中实际节点路径一致。

内容的提问来源于stack exchange,提问作者FDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:49:16