Android Firebase - 为什么忽略地图字段中的空值

时间:2016-02-25 17:41:45

标签: java android firebase

我发现在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);

1 个答案:

答案 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()时,此行为同样有用。