初始调用是:
db_reference
.Child("total_users")
.RunTransaction(RunTransaction)
.ContinueWithOnMainThread(task => {
if (task.Exception != null) {
Debug.Log("Transaction exception.");
} else if (task.IsCompleted) {
Debug.Log("Transaction complete.");
}
});
它呼吁:
TransactionResult RunTransaction(MutableData mutableData) {
List<object> data = mutableData.Value as List<object>;
if (data != null) {
Debug.Log("data not null: " + data);
// I want to increment data here but mutableData always null
} else {
Debug.Log("data null");
}
return TransactionResult.Success(mutableData);
}
目标是简单地从可变数据中获取一个值并递增它,但是这总是返回null,而不是存储在RTDB中的数据。除了记录null之外,事务也没有错误地完成。
此外,当我更新值时为null:
TransactionResult RunTransaction(MutableData mutableData) {
List<object> data = mutableData.Value as List<object>;
if (data != null) {
Debug.Log("data not null: " + data);
// I want to increment data here but mutableData always null
} else {
Debug.Log("data null");
// settings default value as per docs below
Dictionary<string, object> newData = new Dictionary<string, object>();
newData["total_users"] = 1;
mutableData.Value = newData;
}
return TransactionResult.Success(mutableData);
}
这确实成功更新了RTDB中的值,但这似乎覆盖了存储的实际值,该值没有通过,并且对于接收到的mutableData始终显示null。
任何帮助非常感谢。
获取当前值的初始null
是预期的行为。
Firebase会立即调用您的回调,并对节点的当前值进行最佳猜测,通常是null
。即使您知道这永远不会是值,SDK也无法知道。因此,您的代码应该处理null
(例如通过返回像0
这样的初始值),然后在SDK从服务器获得更新的当前值后再次调用。
另见: