噢,天哪,所以我花了最后一个小时的时间阅读并尝试了以不同的方式在Android系统偏好设置和本地存储中存储ArrayListParcelable Object的方法,现在回到正题。顺便说一下,我已经下载并导入了Gson,并不是说我可以使它工作。

基本上,我有一个名为Task的类,位于名为ArrayList<>taskList中,即使我的用户关闭了我的应用程序,也需要保存该类。 ObjectString,一些Ints,一些BooleansArrayList类的Subtask(如果需要)组成。重要的是,似乎我不能只将它写为字符串列表,而且我发现的所有教程都只显示了保存简单的ArrayLists(如Strings),并且它们都是可序列化的,而不是可打包的。

编辑:,谢谢您的建议,但我实现了Parcelable来在 Activity 之间的列表中包裹特定对象。

最佳答案

根据Parcelable API

可打包:用于其实例可以写入Parcel或从ArrayList恢复的类的接口。

并阅读Parcel API:

Parcel不是通用的序列化机制。 此类(和用于将任意对象放入Parcel的相应Parcelable API)设计为高性能IPC传输。因此,将任何Parcel数据放置到持久性存储中是不合适的:对Parcel中任何数据的基础实现进行更改会导致较旧的数据不可读。

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

另外,根据您的问题:

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

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

this question的附加信息

在首选项中设置值:

// 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.
}

更多信息:

Using Shared Preferences

Shared Preferences

09-11 19:27
查看更多