Почему SharedPreference возвращает ноль, даже если он сохранен в моем методе SaveData ()? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть два метода в одном упражнении. Один для загрузки настроек и один для сохранения.

Я беру 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, работают нормально. Что я тут не так делаю?

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