2016-02-25 67 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的一點。 –