噢,天哪,所以我花了最后一个小时的时间阅读并尝试了以不同的方式在Android系统偏好设置和本地存储中存储ArrayList
的Parcelable Object
的方法,现在回到正题。顺便说一下,我已经下载并导入了Gson,并不是说我可以使它工作。
基本上,我有一个名为Task
的类,位于名为ArrayList<>
的taskList
中,即使我的用户关闭了我的应用程序,也需要保存该类。 Object
由String
,一些Ints
,一些Booleans
和ArrayList
类的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