重新启动应用程序时,不会加载ArrayList

时间:2016-06-10 11:19:47

标签: android arraylist save load sharedpreferences

我对android很新,我遇到了保存和加载数据的问题。

我正在尝试使用保存和加载按钮创建应用程序,这些按钮应该保存2个带有x和y坐标的ArrayLists。

我尝试过使用SharedPreferences,它可以运行,直到应用程序重新启动或屏幕旋转。

当我查看应用程序文件时,ArrayLists文件位于SharedPreferences文件夹中,但是如果我按下加载按钮,我的应用程序将不会加载它们。

有人可以帮助我们解决为什么在重新启动应用时这不起作用吗?

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

git replace --graft <commit> <parent1> <parent2>

1 个答案:

答案 0 :(得分:0)

可能的错误;您正在重新初始化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);
}

另请注意,PREFS和JSON_KEY是最终键值

private final String PREFS = "prefs";
private final String JSON_KEY = "json";
private SharedPreferences sharedPrefs;
private SharedPreferences.Editor editor;
private String json;
private Gson gson;