У меня есть два метода в одном упражнении. Один для загрузки настроек и один для сохранения.
Я беру ArrayList и преобразую его в строку Json. Затем я беру эту строку и добавляю ее в другой ArrayList. Еще раз, я беру этот ArrayList и преобразовываю его в Json строку. Эта строка, состоящая из Json строк, которые изначально были списками ArrayLists, затем сохраняется в SharedPreferences.
При выполнении метода SaveData () я также получаю, что строка Json, составленная из ArrayList Json строк. Когда я печатаю его на экране, он показывает все данные, как и должно быть.
Но когда я пытаюсь загрузить его, используя метод LoadData (), тот же ключ возвращает ноль.
public void SaveData(){
SharedPreferences sharedPrefs = getSharedPreferences("Shared Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPrefs.edit();
Gson gson = new Gson();
String jsonReportNameArray = gson.toJson(arrayListExpenseReportNames);
//Convert Expenses array to json
String jsonArrayOfArrays = gson.toJson(arrayListExpenses);
//Add jsonArrayOfExpenseArrays to parent array
if(arrayListOfExpenseArrays == null){
arrayListOfExpenseArrays = new ArrayList<>();
}
arrayListOfExpenseArrays.add(jsonArrayOfArrays);
//Convert this ArrayList to json to be stored
String jsonArrayExpenseArraysToSharedPrefs = gson.toJson(arrayListOfExpenseArrays);
//Add to shared prefs
editor.putString("Report Expenses", jsonArrayExpenseArraysToSharedPrefs);
editor.putString("Report Name", jsonReportNameArray);
editor.apply();
//These two lines print the intended data
String jsonReportExpenses = sharedPrefs.getString("Report Expenses", null);
System.out.println("Expenses retrieved: " + jsonReportExpenses);
}
Получение данных
public void LoadData(){
SharedPreferences sharedPrefs = getSharedPreferences("Shared Prefs", MODE_PRIVATE);
Gson gson = new Gson();
String jsonReportNameArray = sharedPrefs.getString("Report Name", null);
Type type = new TypeToken<ArrayList<String>>(){}.getType();
arrayListExpenseReportNames = gson.fromJson(jsonReportNameArray, type);
//Retrieve ArrayListOfExpenseArrays
String jsonReportExpenses = sharedPrefs.getString("Report Expenses", null);
//This returns null
System.out.println("Expenses Retrieved: " + jsonReportExpenses);
arrayListOfExpenseArrays = gson.fromJson(jsonReportExpenses, type);
if(arrayListExpenseReportNames != null && arrayAdapterExpenseReports != null){
arrayAdapterExpenseReports.notifyDataSetChanged();
}
}
Другие данные, сохраненные в SharedPrefs, работают нормально. Что я тут не так делаю?