哈希图:

public HashMap<Perk, Boolean> perks;
public HashMap<Perk, Boolean> getPerks() {
    return perks;
}


如何保存(工作正常,我正在使用Google的GSON):

object.add("perks", builder.toJsonTree(player.perks));


保存预览:

"perks": {
    "DAMAGE_AMPLIFIER": true
  }


我如何尝试加载但无法正常工作,错误如下。

if (reader.has("perks")) {
    jsonToMap(reader.get("perks").toString(), player);
}


jsonToMap方法:

    public static void jsonToMap(String t, Player player) throws JSONException {

    JSONObject jObject = new JSONObject(t);
    Iterator<?> keys = jObject.keys();

    while(keys.hasNext()) {
        String key = keys.next().toString();
        boolean value = jObject.getBoolean(key);
        player.perks.put(Perk.valueOf(key), value);
    }
}


错误:

java.lang.NullPointerException
at com.callisto.world.entity.impl.player.PlayerLoading.jsonToMap(PlayerLoading.java:730)
at com.callisto.world.entity.impl.player.PlayerLoading.getResult(PlayerLoading.java:684)

最佳答案

如果我不得不猜测perks为空,这就是为什么当您put时会得到一个空指针。更改为:

public HashMap<Perk, Boolean> perks=new HashMap<>(); //We init the hashmap here so we can putt stuff after that
public HashMap<Perk, Boolean> getPerks() {
    return perks;
}


另外,您甚至可以将其更改为:
Map<Perk, Boolean> perks=new HashMap<>();并使用接口而不是方法中的实现

10-08 01:37