关闭应用程序后,SharedPreferences不存储值

时间:2018-12-28 19:50:43

标签: android sharedpreferences

我尝试通过以下代码通过SharedPreferences在ArrayList中存储一些值:

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 :(得分:-1)

您是否尝试过使用.commit()

更改

 editorSharedPreferencesSaveResults.apply();

 editorSharedPreferencesSaveResults.commit();

原因是.apply()异步在后台写入; .commit()会立即写在任何地方。因此,如果您要关闭应用程序,则要在关闭应用程序之前快速保存这些更改。