2016-12-17 2 views
1

Призвание:Клиринговый HashMap сразу после updateChildren нарушает функциональность

HashMap<String, Object> updates = new HashMap<String, Object>(); 
updates.put(myKey, null); 
mDatabase.updateChildren(updates); 
updates.clear(); 

не выполняет ожидаемого удаления значения из MYKEY месте. Это может быть легко решена путем клонирования updates HashMap, позвонив:

mDatabase.updateChildren(new HashMap<String, Object>(updates)); 

Является ли это ошибка или ожидаемое поведение? Есть ли на нем документация?

ответ

1

Обновление отправляется в базу данных Firebase асинхронно. Вы не должны изменять карту, которую вы передаете в Firebase, до завершения обновления.

Это легко сделать с updateChildren() method that takes a completion listener):

mDatabase.updateChildren(updates, new DatabaseReference.CompletionListener() { 
    @Override 
    public void onComplete(DatabaseError error, DatabaseReference ref) { 
     if (error == null) { 
      updates.clear(); 
     } 
    } 
}); 
+0

Спасибо за предложение, я перееду его пополнению слушателя. Говоря о том, что, поскольку аргументом callback является DatabaseReference в корне базы данных, означает ли это, что он действительно загружает всю базу данных после выполнения updateChildren? Документация часто советует получать только самое маленькое дерево, поэтому наличие этого корня DatabaseReference заставляет меня хотеть дважды проверить, что DataSnapshot не извлекается вместе с ним. – Voy

+1

Ссылка только загружает данные после прикрепления слушателя. –

+0

отлично, спасибо за разъяснение! – Voy

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