SharedPreferences を介してオブジェクトを読み取っているときに小さな問題があります。何かを書き込むと正常に書き込まれますが、取得しようとするとJson Syntax Exceptionが発生します。ArrayList を渡したり取得したりしています。オブジェクト クラスは Serializable を実装しています。エラー :
IllegalStageException には文字列が必要でしたが、BEGIN_ARRAY でした
これが私のコードです:
public static boolean saveObject(String objKey, Serializable dataObj, Context con) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(dataObj);
editor.putString(objKey, json);
return editor.commit();
}
public static Object getObject(String objKey, Context con) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
Gson gson = new Gson();
String json = prefs.getString(objKey, "");
Object o = gson.fromJson(json, objKey.getClass());
return o;
}
メソッドの実行方法:
if(ReadWrite.isCustomStringExistInLocal("levels", this)){
System.out.println("Exists");
levels = (ArrayList<Level>) ReadWrite.getObject("levels", getApplicationContext());
}
else{
System.out.println("New");
levels = new ArrayList<Level>();
int teller =0;
for(int i=1;i<=10;i++){
levels.add(new Level(0, 0, teller));
teller+=6;
}
ReadWrite.saveObject("levels", levels, this);
}