2016-09-15 2 views
0

Как добавить в список транзакций базы данных Firebase Realtime с использованием MutableData?База данных реального времени Firebase добавить в список в MutableData

В обычном обновлении бесконтактного типа транзакции, я могу просто использовать

DatabaseReference refDatabase = ...  
refDatabase.push().setValue(value); 

Но с MutableData, ни один из методов, такой нажим() не существует. Как добавить в список и получить уникальный ключ?

Я ищу что-то вроде

public Transaction.Result doTransaction(MutableData mutableData) { 
     mutableData.push().setValue(value); 
     ... 

, но это не существует.

+0

Вызов 'push()' является чистой клиентской операцией. Вы можете вызвать 'refDatabase.push(). GetKey()' и получить уникальный ключ из любого места вашего кода. Если у вас возникли проблемы с выполнением транзакции, покажите [минимальный код, воспроизводящий эту проблему] (http://stackoverflow.com/help/mcve). –

+0

Спасибо @Frank van Puffelen, который решает уникальную ключевую проблему, но не показывает, как добавить в список MutableData, как я думаю, я четко спросил. Это не столько предоставление минимального кода, чтобы воспроизвести проблему, показав, что метод, который мне нужен, кажется, не существует. – aez

ответ

1

Я думаю, что я понимаю суть вашего вопроса и комментария: Было бы хорошо знать, был ли отсутствие push() надзором дизайнеров API, или он был намеренно опущен, чтобы помешать пользователям делать что-то небезопасное или иначе «плохо».

Существует обходное решение, не так ли? Вы знаете ссылку, на которой выполняется транзакция. Изменчивыми данными является значение этого ссылочного местоположения. Не можете ли вы сделать ссылочную переменную поле пакета или final переменной класса и использовать ее в обратном вызове для вызова push()? Это уродливо, но я думаю, что это сработает.

Я также предполагаю, что push() был опущен из MutableData. В documentation for doTransaction() состоянии:

Этот метод будет вызываться, возможно, несколько раз, с текущими данных в этом месте. Он отвечает за проверку этих данных и , возвращая транзакцию. Результат, указывающий либо нужные новые данные в месте нахождения, либо транзакция должна быть прервана.

Поскольку этот метод может быть вызван повторно для той же транзакции, должен быть предельно осторожен в отношении любых побочных эффектов, которые могут быть вызваны этим методом .

Возможно, создание ключей и добавление элементов в список - это не то, что вы хотите делать, поскольку это может происходить несколько раз.

Смежные вопросы