我尝试通过以下代码通过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中存在的所有解决方案,但是又再次发生了!
答案 0 :(得分:-1)
您是否尝试过使用.commit()
?
更改
editorSharedPreferencesSaveResults.apply();
到
editorSharedPreferencesSaveResults.commit();
原因是.apply()
异步在后台写入; .commit()
会立即写在任何地方。因此,如果您要关闭应用程序,则要在关闭应用程序之前快速保存这些更改。