Android ArrayList赢得';应用程序重新启动时无法加载

Android ArrayList赢得';应用程序重新启动时无法加载,android,arraylist,save,load,sharedpreferences,Android,Arraylist,Save,Load,Sharedpreferences,我是android新手,在保存和加载数据方面遇到了问题 我正在尝试制作一个带有保存和加载按钮的应用程序,这些按钮应该保存两个带有x坐标和y坐标的ArrayList 我试着用SharedReferences来做,直到应用程序重新启动或屏幕旋转为止 当我查看应用程序文件时,ArrayList文件位于SharedReferences文件夹中,但如果我按“加载”按钮,我的应用程序将不会加载这些文件 有谁能帮我们解释一下,为什么在应用程序重新启动时,这项功能不起作用 这是我的加载和保存代码: pu

我是android新手,在保存和加载数据方面遇到了问题

我正在尝试制作一个带有保存和加载按钮的应用程序,这些按钮应该保存两个带有x坐标和y坐标的ArrayList

我试着用SharedReferences来做,直到应用程序重新启动或屏幕旋转为止

当我查看应用程序文件时,ArrayList文件位于SharedReferences文件夹中,但如果我按“加载”按钮,我的应用程序将不会加载这些文件

有谁能帮我们解释一下,为什么在应用程序重新启动时,这项功能不起作用

这是我的加载和保存代码:

    public void saveArrayList(ArrayList aList, String s) {
    SharedPreferences sharedPrefs = getSharedPreferences(prefs, MODE_PRIVATE);
    editor = sharedPrefs.edit();

    Gson gson = new Gson();
    String json = gson.toJson(aList);

    editor.putString(s, json);
    editor.commit();
}

public void loadFloatList(ArrayList aList, String s) {
    SharedPreferences sharedPrefs = getSharedPreferences(prefs, MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPrefs.getString(s, null);
    Type type = new TypeToken<ArrayList<Float>>() {
    }.getType();
    aList = gson.fromJson(json, type);
}
public void saveArrayList(ArrayList列表,字符串s){
SharedReferences SharedReferences=GetSharedReferences(优先,模式\私有);
editor=sharedPrefs.edit();
Gson Gson=新的Gson();
字符串json=gson.toJson(aList);
putString(s,json);
commit();
}
公共void loadFloatList(ArrayList列表,字符串s){
SharedReferences SharedReferences=GetSharedReferences(优先,模式\私有);
Gson Gson=新的Gson();
String json=sharedPrefs.getString(s,null);
Type Type=new-TypeToken(){
}.getType();
aList=gson.fromJson(json,类型);
}

可能的错误;您正在重新初始化gson和sharedPrefs,然后它们将采用具有相同键值的新状态。您应该在onCreate中执行此操作

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    sharedPrefs = getSharedPreferences(PREFS, MODE_PRIVATE);
    json = sharedPrefs.getString(JSON_KEY, "");
    gson = new Gson();
}
最好使用apply(),因为这会将sharedprefs的值保存为实例,但commit()会在应用程序关闭时执行此操作

public void saveArrayList(ArrayList aList) {

    String json = gson.toJson(aList);

    editor = sharedPrefs.edit();
    editor.putString(JSON_KEY, json);
    editor.apply();
}

public void loadFloatList(ArrayList aList, String s) {

    json = sharedPrefs.getString(JSON_KEY, "");
    Type type = new TypeToken<ArrayList<Float>>() {
    }.getType();
    aList = gson.fromJson(json, type);
}
private final String PREFS = "prefs";
private final String JSON_KEY = "json";
private SharedPreferences sharedPrefs;
private SharedPreferences.Editor editor;
private String json;
private Gson gson;