我正在尝试创建一个类,该类将包含用于保存对象的arraylist并将其加载到SharedReference中的方法。但是,当我尝试加载以前保存的数据时。就好像它没有拯救。我正在使用谷歌的gson库来帮助你。
示例\读\写.java
public class Instance_Read_Write {
public void saveData(Context context, ArrayList<Example> Examples){
SharedPreferences sharedPreferences = context.getSharedPreferences("instanceKey",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(Examples);
editor.putString("list", json);
editor.apply();
}
public void loadData(Context context, ArrayList<Example> Examples) {
SharedPreferences sharedPreferences = context.getSharedPreferences("instanceKey",Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("list", null);
Type type = new TypeToken<ArrayList<Example>>() {}.getType();
Examples = gson.fromJson(json, type);
if (Examples == null) {
Examples = new ArrayList<>();
}
}
}
这就是我引用它们的方式。
主活动.java
Instance_Read_Write instance_read_write = new Instance_Read_Write();
instance_read_write.loadData(context,Examples);
Examples.add(new Example("test"));
...
...
...
instance_read_write.saveData(context,Examples);
有没有办法让这一切顺利?或者更好的方法?
2条答案
按热度按时间ffdz8vbo1#
这解决了您发布的代码中的一个错误,即
Examples
方法中的参数loadData
方法。既然你的意图
loadData
总是生成一个arraylist,然后我建议返回示例。或者,您必须首先创建一个空的arraylist并传入它,然后对其进行操作。所以使用返回arraylist的方法:
不要让“传递值”和“传递引用”的讨论火上浇油——这似乎是您所期待的
Example
要通过在方法体中指定来更新的实际参数-它不会-您只能对对象进行操作以影响它:https://stackoverflow.com/a/40523/2711811.为了完成这个主题,这里有一个解决方案,它将继续您传递
Examples
对象:p4tfgftt2#
将
告诉我是否有效