当应用程序重新启动时,ArrayList将无法加载
问题描述:
我对android非常陌生,并且在保存和加载数据时遇到问题。当应用程序重新启动时,ArrayList将无法加载
我试图与一个应用程序保存和加载按钮,这些按钮应该保存2周的ArrayList与x和y坐标。
我试着做SharedPreferences它和它的作品,直到重新启动应用程序或屏幕旋转。
当我把看在应用程序文件中的ArrayList文件在SharedPreferences文件夹,但如果我按下按钮负荷我的应用程序将不会加载这些。
任何人都可以帮助我们为什么这个不起作用,当应用程序重新启动?
这是我的加载和保存代码:
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);
}
答
可能出现的错误;您正在重新初始化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();
}
最好是使用应用(),因为这个保存sharedprefs作为实例的值(一个或多个),但提交()做到这一点,当应用程序关闭。
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;