Загрузка Hashmap через JSON - PullRequest
0 голосов
/ 08 мая 2018

Hashmap:

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)

1 Ответ

0 голосов
/ 08 мая 2018

Если мне нужно угадать, 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<>(); и использовать интерфейс, а не реализацию в ваших методах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...