Я использую базу данных firebase, и у меня есть странная ошибка с транзакциями. В основном я ключ называется «пользователи» с отсчетом параметров и список пользователей, как это:Ошибка транзакции Unity Firebase
"users" : {
"count" : 1,
"userList" : {
"LBBgLkOp3bWbZeSfnKVsqkHeW8s1" : true
}
}
Я использую транзакцию, чтобы увеличить количество и добавить идентификатор текущего пользователя к USERLIST. Проблема заключается в том, что если нет ключа пользователей (в первый раз) сделка завершает успешно, но если уже есть пользователи ключевой сделка не может без причины ...
Моего кода это
void AddUserAndIncrementCount()
{
FirebaseDatabase.DefaultInstance.GetReference("users")
.RunTransaction(usersData =>
{
Dictionary<string, object> users = usersData.Value as Dictionary<string, object>;
if (users == null)
{ // firstTime
users = new Dictionary<string, object>();
users.Add("count", 1);
users.Add("userList", new Dictionary<string, object>() { { auth.CurrentUser.UserId, true }});
}
else
{
/* printing users returns this
{"count":1,"userList":{"LBBgLkOp3bWbZeSfnKVsqkHeW8s1":true}}
*/
// INCREMENT COUNT
users["count"] = int.Parse(users["count"].ToString()) + 1;
// ADD USER TO LIST
Dictionary<string, object> userList = users["userList"] as Dictionary<string, object>;
userList.Add(auth.CurrentUser.UserId, true);
users["userList"] = userList;
}
// END TRANSACTION
/* printing users returns this now
{"count":2,"userList":{"LBBgLkOp3bWbZeSfnKVsqkHeW8s1":true,"AM2vI8K106XghEgEgRSkCIpJn0w2":true}}
*/
usersData.Value = users;
return TransactionResult.Success(usersData);
}).ContinueWith(OnAddUserIncrementCountTask);
}
void OnAddUserIncrementCountTask(Task<DataSnapshot> task)
{
if (task.IsCompleted && !task.IsCanceled && !task.IsFaulted)
{
//Success
}
else
{
Debug.Log(task.IsFaulted+" - "+task.Exception.Message);
// True - Exception of type 'System.AggregateException' was thrown.
}
}
Как вы можете видеть, я печатал то, что получаю и отправляю транзакцию, и все кажется прекрасным. Я пытался установить правила для публики (прочитал true и написал true), и он также потерпел неудачу, поэтому я не знаю, делаю ли я что-то плохое или что-то не так с транзакциями. Меня беспокоит то, что, если ключ пользователя не существует в базе данных, он не терпит неудачу, поэтому я думаю, что он не работает по какой-то странной причине, я не вижу ...
Я тестирую на Android-устройство.
спасибо.
Firebase разработчик здесь. Спасибо, что нашли обходной путь Хуан, и я приношу свои извинения за этот вопрос. это будет исправлено в следующем выпуске SDK 1.1.3. –
Привет, без проблем, я сообщил об этом неделю назад вашей команде поддержки. Это не большая проблема для меня, но было трудно понять, почему она терпит неудачу. Огненная база потрясающая! Сохраняйте хорошую работу :) –