Хэш-карта:
public HashMap<Perk, Boolean> perks;
public HashMap<Perk, Boolean> getPerks() {
return perks;
}
Как сохраняю (отлично работает, использую GSON от Google):
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 имеет значение NULL, и поэтому, когда вы выполняете 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<>(); и используйте интерфейс, а не реализацию в ваших методах
У вас есть нули на карте? Я предполагаю, что логическое значение = jObject.getBoolean (key); возвращает null, это может быть из-за вашего json или чего-то еще
Или, возможно, повторение JsonOject. Я не знаю реализации, но вы должны сделать что-то вроде jObject.get ("perks"). Keys (), что я предполагаю
Логической оболочке для логического типа при объявлении присваивается значение null, в отличие от собственного логического значения, которое по умолчанию имеет значение false.
да, я думаю, проблема в том, что он не получает правильного значения, когда повторяет JsonObject.
Это сработало отлично, но все еще есть нулевые значения. Я предполагаю, что там, где он помещается в хэш-карту, он делает это неправильно. Любая идея?