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
相关产品推荐
相关产品推荐

