Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 共享引用不';关闭应用程序后不存储值_Android_Sharedpreferences - Fatal编程技术网

Android 共享引用不';关闭应用程序后不存储值

Android 共享引用不';关闭应用程序后不存储值,android,sharedpreferences,Android,Sharedpreferences,我试图通过以下代码通过SharedReferences在ArrayList中存储一些值: public static String jsonSavePracticeResult; private SharedPreferences sharedPreferencesSaveResults = PreferenceManager.getDefaultSharedPreferences(this); public void savePracticeResults(ArrayList<Keep

我试图通过以下代码通过SharedReferences在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();
}
公共静态字符串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
检索这些值,但在从最近的应用程序中关闭后,如果再次输入app
jsonSavePracticesResult
为空,您是否检查了此项?我以前用过,效果很好!:)是的,我在发这篇文章之前测试过它,它不起作用
 editorSharedPreferencesSaveResults.commit();