2016-02-25 4 views
3

Я обнаружил, что при сохранении POJO с полем карты с использованием Firebase на Android, если эта карта содержит значения null в свойстве value этой карты, тогда все поле игнорируется.Android Firebase - Почему нулевые значения в полях карты игнорируются

Обходной путь прост (непустые значения приведут к успешному сохранению карты), но я хочу понять, почему это так?

Модель

public class Game { 

    private String owner; 
    private Map<String, String> characters; 

    public Game() { 
     // empty constructor for Firebase 
    } 

    public String getOwner() { 
     return owner; 
    } 

    public void setOwner(String owner) { 
     this.owner = owner; 
    } 

    public Map<String, String> getCharacters() { 
     return characters; 
    } 

    public void setCharacters(Map<String, String> characters) { 
     this.characters = characters; 
    } 
} 

телефонный код

final Game game = new Game(); 
     game.setOwner("owner"); 
     game.setCharacters(new HashMap<String, String>()); 
     game.getCharacters().put("Bugs Bunny", null); 
     game.getCharacters().put("Batman", null); 
     final Firebase ref = new Firebase("<firebaseurl>/test/" + System.currentTimeMillis()); 
     ref.setValue(game); 

Результирующий объект в Firebase

{ 
    "1456421340781": { 
     "owner": "owner" 
    } 
} 

ответ

3

they'r e фактически не игнорируется. Когда вы даете Firebase значение null для свойства/пути, вы указываете, что хотите удалить свойство или путь.

От documentation on Firebase's JavaScript set() method:

Передача нулевой для нового значения эквивалентно вызову remove(); все данные в этом местоположении или любое дочернее местоположение будут удалены.

Так что, если вы установите значение с:

ref.child("keith").setValue(47649); 

Тогда следующий будет удалить его:

ref.child("keith").setValue(null); 

Такое поведение является наиболее полезным при использовании updateChildren(), но она работает одинаково, когда вы звоните setValue().

+1

Спасибо! Похоже, я недостаточно RTFM, с тех пор нашел «Обратите внимание, что передача null в setValue() приведет к удалению данных в указанном месте». и «Обратите внимание, что передача null на карте приведет к удалению данных в этом месте в базе данных». на https://www.firebase.com/docs/android/guide/saving-data.html – keith

+1

Отлично. Я действительно искал последний ответ, но не смог. Найди это. Я удалю бит об этом, не будучи документированным для Android, из моего ответа. –

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