Почему мои SharedPreferences не загружаются сразу после запуска приложения? - PullRequest
0 голосов
/ 13 июля 2020

Я использую SharedPreferences для хранения пользовательского ввода, чтобы при закрытии приложения и его повторном запуске пользовательский ввод оставался там и не удалялся автоматически. Но когда я повторно запускаю приложение после его закрытия, пользовательский ввод не отображается на экране, пока пользователь не добавит другой ввод. После того, как пользователь добавляет еще один вход, входные данные, которые были добавлены в сеансе до закрытия приложения, теперь отображаются на экране. Есть идеи, почему это может происходить? Спасибо!

Это - то, что происходит в случае необходимости наглядного примера.

Это метод, отвечающий за загрузку введенных пользователем данных, и я называю этот метод по методу onCreate:

    public void loadSemesters() {
        sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
        Gson gson = new Gson();
        String json = sharedPreferences.getString("SEMESTER_LIST", null);
        Type type = new TypeToken<ArrayList<Semester>>() {
        }.getType();
        mySemesters = gson.fromJson(json, type);

        if (mySemesters == null) {
            mySemesters = new ArrayList<>();
        }
    }

Этот метод отвечает за сохранение введенных пользователем данных:

   public void saveSemesters() {
        sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        Type type = new TypeToken<ArrayList<Semester>>() {
        }.getType();
        String json = gson.toJson(mySemesters, type);
        editor.putString("SEMESTER_LIST", json);
        editor.apply();
    }

1 Ответ

1 голос
/ 14 июля 2020

В качестве решения, я думаю, вы забыли установить данные для своих представлений (Обновить пользовательский интерфейс) после перезапуска приложения, поэтому вам нужно обновить свой пользовательский интерфейс

public void loadSemesters() {
       sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
       Gson gson = new Gson();
       String json = sharedPreferences.getString("SEMESTER_LIST", null);
       Type type = new TypeToken<ArrayList<Semester>>() {
       }.getType();
       mySemesters = gson.fromJson(json, type);

       //Your have your semeters arraylist , now get the data from the list and 
       //set it to 
      // your views

       if (mySemesters == null) {
           mySemesters = new ArrayList<>();
       }
   }
...