我发现在Android上使用Firebase保存带有地图字段的POJO时,如果该地图在该地图的value属性中包含空值,则会忽略整个字段。
解决方法很简单(非空值会导致地图成功保存),但我想理解为什么会这样?
模型
Rails.application.routes.draw do
resources :profiles
devise_for :users
resources :posts
resources :profiles, only: [:edit]
resources :users
root 'posts#index'
end
致电代码
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;
}
}
Firebase中生成的对象
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);
答案 0 :(得分:3)
他们实际上没有被忽视。为Firebase提供属性/路径的null
值时,表示您要删除属性或路径。
来自documentation on Firebase's JavaScript set()
method:
为新值传递null等同于调用
remove()
;此位置或任何子位置的所有数据都将被删除。
所以如果你设置一个值:
ref.child("keith").setValue(47649);
然后以下内容将删除它:
ref.child("keith").setValue(null);
当您使用updateChildren()
时,此行为最有用,但当您致电setValue()
时,此行为同样有用。