Ich benutze GSON heute zum ersten Mal. Im Moment versuche ich, eine Klasse mit Werten zu deserialisieren und zu serialisieren. Deserialise funktioniert tadellos, aber beim Laden gibt es nur alle Felder als null aus. Ich möchte wirklich wissen, was ich falsch mache oder warum es nicht funktioniert.GSON setzt alle Felder auf null
Klasse gefüllt werden:
public class PlayerData {
private static Map<UUID, PlayerData> playerDataMap = new HashMap<UUID, PlayerData>();
public UUID uuid;
public Integer kills;
public Integer level;
public Integer xp;
public SkillType skillType;
public PlayerData() {
playerDataMap.put(getUUID(), this);
String logString = "[DEBUG] " + uuid + " " + skillType + " " + level;
ZombieSurvival.getInstance().getLogger().info(logString);
}
}
Saving Code:
private synchronized void savePlayerData(){
try {
Map<UUID, PlayerData> map = PlayerData.getPlayerDataMap();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String seperator = File.separator;
String path = getDataFolder().getAbsolutePath() + seperator + "PlayerData" + seperator;
File folder = new File(path);
folder.mkdirs();
for(UUID uuid : map.keySet()){
PlayerData pd = map.get(uuid);
String json = gson.toJson(pd);
File myFile = new File(folder,uuid.toString() + ".json");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut);
myOutWriter.append(json);
myOutWriter.close();
fOut.close();
}
} catch (Exception e){
e.printStackTrace();
}
}
INFO: JSON Inhalt wurde von dieser Methode erstellt!
Loading Code:
private void loadPlayerData() {
try {
//Setup GSON Loading
String seperator = File.separator;
File invasionMobFolder = new File(getDataFolder() + seperator + "PlayerData" + seperator);
invasionMobFolder.mkdirs();
File[] listOfFiles = invasionMobFolder.listFiles();
for (File file : listOfFiles) {
if (file.getName().endsWith(".json")) {
FileInputStream fIn = new FileInputStream(file);
BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
String aDataRow = "";
String aBuffer = ""; //Holds the text
while ((aDataRow = myReader.readLine()) != null) {
aBuffer += aDataRow;
}
myReader.close();
Gson gson = new Gson();
gson.fromJson(aBuffer, PlayerData.class);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
JSON Inhalt:
{
"uuid": "ba79c71f-aa2c-4f8b-a7e5-d6bfea7a4dcc",
"kills": 0,
"level": 0,
"xp": 0,
"skillType": "KNIGHT"
}
Ihre Methode macht nichts mit den deserialisierten Objekten. Also was genau ist null? Siehe auch https://google.github.io/gson/apidocs/com/google/gson/Gson.html#fromJson-java.io.Reader-java.lang.Class- –
Ofc tut alles. Er liest die Datei und gibt die JSON-Zeichenfolge an Gson aus, damit sie den Variablen Werte zuweisen kann. Nun, alles ist null. UUID ist null, skillType ist null und die Ebene ist null. Sie können sehen, dass diese Objekte in der .json-Datei vorhanden sind. Das Speichern, das den Inhalt der JSON-Datei erstellt hat, funktioniert auch. – FurtherV