Android 共享引用不';关闭应用程序后不存储值
我试图通过以下代码通过SharedReferences在ArrayList中存储一些值:Android 共享引用不';关闭应用程序后不存储值,android,sharedpreferences,Android,Sharedpreferences,我试图通过以下代码通过SharedReferences在ArrayList中存储一些值: public static String jsonSavePracticeResult; private SharedPreferences sharedPreferencesSaveResults = PreferenceManager.getDefaultSharedPreferences(this); public void savePracticeResults(ArrayList<Keep
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();
}
公共静态字符串jsonSavePracticeResult;
private SharedReferences SharedReferencesAveraresults=PreferenceManager.GetDefaultSharedReferences(此);
公共无效保存实践结果(ArrayList)
arrayListPracticeResult){
Gson Gson=新的Gson();
jsonSavePracticeResult=gson.toJson(arrayListPracticeResult);
SharedReferences.Editor编辑器SharedPreferencesSaveResults;
EditorSharedPreferencesSavesResults=
SharedPreferenceSaveResults.edit();
editorSharedPreferencesSaveResults.clear();
编辑共享首选项安全结果
.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;
}
public ArrayList getSavedPracticeResults(){
jsonSavePracticeResult=SharedPreferenceSaveResults.getString(“donePracticeList”,jsonSavePracticeResult);
Gson Gson=新的Gson();
Type Type=new-TypeToken(){}.getType();
keepPracticeResultsModels=gson.fromJson(jsonSavePracticeResult,类型);
返回keepPracticeResultsModels;
}
当应用程序打开时,它工作正常,但当您尝试从最近的应用程序关闭应用程序,然后再次打开应用程序时,SharedReferences值将丢失,JSONSavePracticesResult为空!
我还在onResume()
和onPause()
中调用了getSavedPracticeResults()
我做了StackOverflow中存在的所有解决方案,但它又在发生 您是否尝试过使用
.commit()
替代
改变
editorSharedPreferencesSaveResults.apply();
到
原因是
.apply()
在后台异步写入;无论何时,.commit()
都将立即写入。因此,如果要关闭应用程序,您希望在关闭应用程序之前快速保存这些更改 发布更多与SharedPreferenceSaveResults
@Omer特别相关的代码,我在代码中添加了SharedPreferenceSaveResults
。@RichardLeMesurier否,因为我在运行应用程序时调试过,该方法存储了所有值,您可以通过返回keepPracticeResultsModels
检索这些值,但在从最近的应用程序中关闭后,如果再次输入appjsonSavePracticesResult
为空,您是否检查了此项?我以前用过,效果很好!:)是的,我在发这篇文章之前测试过它,它不起作用
editorSharedPreferencesSaveResults.commit();