2016-02-25 66 views
3

我在Android上使用Firebase保存地图字段的POJO时发现,如果该地图在该地图的值属性中包含空值,则忽略整个字段。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); 

在火力地堡

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

回答

3

They'r生成的对象实际上不会被忽略。向Firebase提供属性/路径的null值时,表示要删除属性或路径。

documentation on Firebase's JavaScript set() method

传递null新值等同于调用remove();该位置或任何儿童位置的所有数据都将被删除。

因此,如果您设置的值用:

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

那么下面将其删除:当您使用updateChildren()

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

此行为是最有用的,但它同样当您致电setValue()

+1

谢谢!看起来我没有足够好的RTFM,从那以后发现“注意,将null传递给setValue()将删除指定位置的数据。”和“请注意,在地图中传递null将删除数据库中该位置的数据。”在https://www.firebase.com/docs/android/guide/saving-data.html – keith

+1

很好。我确实在寻找最后一个答案,但没有成功。找到它。我会从我的答案中删除关于它未被记录为Android的一点。 –