将ArrayList 保存到本地存储

哦,小伙子,所以我花了大约一个小时左右阅读并尝试在Android偏好设置和本地存储中存储可分配Parcelable ObjectArrayList的不同方法,现在我又回到原点。 顺便说一下,我已经下载并导入了Gson,而不是我可以让它工作。

基本上,我在一个名为taskListArrayList有一个类,即使用户关闭我的应用程序,我也需要保存它。 如果重要的话, Object包含一个String ,一些Ints ,一些BooleansArrayList类的ArrayList 。 重要的是,似乎我不能把它写成一个字符串列表,我发现的所有教程只显示保存简单的ArrayLists,如字符串,它们都是Serializable,而不是Parcelable。

编辑:感谢您的建议,但我实现Parcelable包装活动之间列表中的特定对象..

根据Parcelable API ,

Parcelable:可以将实例写入Parcel并从Parcel恢复的类的接口。

并阅读Parcel API :

包裹不是通用序列化机制。 此类(以及用于将任意对象放入包中的相应Parcelable API)被设计为高性能IPC传输。 因此,将任何Parcel数据放入持久存储中是不合适的:Parcel中任何数据的底层实现的更改都可能导致旧数据不可读。

因此,如果要通过ArrayList存储不同类型的所有引用,则必须将所有对象包装到公共接口,在这种情况下, Serializable是您的朋友。

另外,根据你的问题:

即使我的用户关闭我的应用程序,我也需要保存。

如果检查android生命周期,您将看到需要在onStop()中执行此操作,当您的活动不再对用户可见时调用该操作。

android生命周期

来自这个问题的 附加信息

在偏好中设置值:

 // MY_PREFS_NAME - a static String variable like: //public static final String MY_PREFS_NAME = "MyPrefsFile"; SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); editor.putString("name", "Elena"); editor.putInt("idName", 12); editor.commit(); 

从首选项中检索数据:

 SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); String restoredText = prefs.getString("text", null); if (restoredText != null) { String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. int idName = prefs.getInt("idName", 0); //0 is the default value. } 

更多信息:

使用共享首选项

共享偏好

您可以将自定义对象转换为Json格式作为一个字符串并存储在SharedPreference中。

更新

例如,您的自定义对象是Employee

 public class Employee { private String name = "test"; private int age = 29; @Override public String toString() { return "Employee [age=" + age + ", name=" + name + "]"; } } 

在Activity中,您可以将Java对象转换为String

 Gson gson = new Gson(); Employee m_employee = new Employee(); String str = gson.toJson(m_employee); System.out.println("===== " + str); 

您可以在用户关闭应用程序时将str存储在SharedPreference中。 当用户打开应用程序时从SharedPreference获取。

你可以试试这个:

 FileOutputStream fout = new FileOutputStream("c:\\object.ser"); ObjectOutputStream oos = new ObjectOutputStream(fout); oos.writeObject(yourObject); 

有关详细信息,请参阅此链接: – 此处