Скажем, у меня есть проект с узлом «пользователи» и «домашним» узлом. Когда пользователь получает домашнее животное, я хочу, чтобы оба добавляли ключ домашнего животного на узел «домашних животных» пользователя и идентификатор пользователя на узел владельца «домашних животных».Создание транзакции Android Firebase, которая модифицирует несколько узлов
Пример:
{
"users":{
"user1":{
"pets":{
"pet1":true,
"pet3":true
}
...
}
},
"pets":{
"pet1":{
"owner":"user1",
...
},
...
}
}
Я хочу, чтобы убедиться, что оба обновления удастся предотвратить несогласованное состояние.
Я читал о том, как работать с Firebase сделок here, однако, когда я пытаюсь создать транзакцию, которая изменяет соответствующие значения (с помощью dbRef.runTransaction (...)), я получаю эту ошибку DatabaseError:
The transaction had too many retries
Только транзакция работает, когда я вызываю runTransaction() на конкретном узле, который я модифицирую (например, вызывая dbRef.child («users»). Child («user1»). RunTransaction (...)), однако это не помогает мне, потому что мне нужно связаться как с соответствующим пользователем, так и с домашним животным.
Как я могу совершить эту транзакцию?
Сообщение об ошибке означает, что у вас слишком много споров относительно обновлений. Решение, как правило, заключается в том, чтобы снизить транзакцию в дерево, чтобы уменьшить конкуренцию. Но, не видя проблемного кода, трудно быть конкретным. –