SharedPreferences не сохраняет значения после закрытия приложения - PullRequest
0 голосов
/ 28 декабря 2018

Я пытался сохранить некоторые значения в ArrayList с помощью SharedPreferences с помощью следующего кода:

public static String jsonSavePracticeResult;
private SharedPreferences sharedPreferencesSaveResults = PreferenceManager.getDefaultSharedPreferences(this);

public void savePracticeResults(ArrayList<KeepPracticeResultsModel> 
arrayListPracticeResult) {
    Gson gson = new Gson();
    jsonSavePracticeResult = gson.toJson(arrayListPracticeResult);
    SharedPreferences.Editor editorSharedPreferencesSaveResults;
    editorSharedPreferencesSaveResults = 
    sharedPreferencesSaveResults.edit();
    editorSharedPreferencesSaveResults.clear();
    editorSharedPreferencesSaveResults
    .putString("donePracticeList",jsonSavePracticeResult);
        editorSharedPreferencesSaveResults.apply();
}

После этого я получил значения с помощью следующего кода:

public ArrayList<KeepPracticeResultsModel> getSavedPracticeResults(){

        jsonSavePracticeResult = sharedPreferencesSaveResults.getString("donePracticeList", jsonSavePracticeResult);
        Gson gson = new Gson();
        Type type = new TypeToken<ArrayList<KeepPracticeResultsModel>>() {}.getType();
        keepPracticeResultsModels = gson.fromJson(jsonSavePracticeResult, type);
        return keepPracticeResultsModels;
}

Когда приложениеоткрыт, работает нормально, но когда вы пытаетесь закрыть приложение из последних приложений, и после этого вы снова открываете приложение, значения SharedPreferences теряются, а jsonSavePracticeResult имеет значение Null!Также я позвонил getSavedPracticeResults() в onResume() и onPause().

Я сделал все решения, которые существовали в StackOverflow, но это происходит снова!

1 Ответ

0 голосов
/ 28 декабря 2018

Вы пытались использовать .commit() вместо?

Изменить

 editorSharedPreferencesSaveResults.apply();

на

 editorSharedPreferencesSaveResults.commit();

Причина в том, что .apply() пишет в фоновом режиме,асинхронно;где .commit() напишет сразу.Таким образом, если вы закрываете свое приложение, вы хотите быстро сохранить эти изменения до закрытия приложения.

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