哦,小男孩,所以我花了大约一小时左右的时间阅读并尝试在Android偏好设置和本地存储中存储ArrayList
Parcelable Object
的不同方式,现在我&# 39;回到原点。顺便说一句,我已经下载并导入了Gson,而不是我可以让它工作。
基本上,我在名为Task
的{{1}}中有一个名为ArrayList<>
的班级,即使用户关闭我的应用,我也需要保存。如果重要的话,taskList
由Object
,部分String
,部分Ints
和Booleans
等级ArrayList
组成。重要的是,似乎我不能把它写成一个字符串列表,我发现的所有教程都只显示保存简单的ArrayLists,如Strings,它们都是Serializable,而不是Parcelable。
编辑:感谢您的建议,但是我将Parcelable实施为活动之间列表中的特定对象..
答案 0 :(得分:2)
Parcelable:可以在Parcel
上写入和恢复实例的类的接口。
阅读Parcel API:
Parcel不是通用序列化机制。此类(以及用于将任意对象放入Parcel的相应Parcelable API)被设计为高性能IPC传输。因此,将任何Parcel数据放入持久存储中是不合适的:Parcel中任何数据的底层实现的更改都可能导致旧数据不可读。
因此,如果要通过ArrayList
存储不同类型的所有引用,则必须将所有对象包装到公共接口,在这种情况下Serializable是您的朋友。
另外,根据你的问题:
即使用户关闭我的应用,我也需要保存。
如果您检查Android生命周期,您将看到需要在onStop()中执行此操作,当您的活动不再对用户可见时,会调用此操作。
来自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.
}
更多信息:
答案 1 :(得分:0)
您可以将自定义对象转换为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);
当用户关闭应用程序时,您可以在SharedPreference中存储 str 。当用户打开应用程序时从SharedPreference获取。
答案 2 :(得分:0)
你可以试试这个:
FileOutputStream fout = new FileOutputStream("c:\\object.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(yourObject);
有关详细信息,请参阅此链接: - Here
答案 3 :(得分:0)
我们可以保存自定义数组列表,并使用 SharedPreference
进行获取public void SaveArrayList(ArrayList<CustomObj> listArray){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences.Editor editor = prefs.edit(); Gson gson = new Gson(); String json = gson.toJson(listArray); editor.putString("TAG_LIST", json); ///"TAG_LIST" is a key must same for getting data editor.apply(); }
*要从SharedPrefrence获取数组列表
public ArrayList<CustomObj> getArrayList(){
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(getContext());
Gson gson = new Gson();
String json = prefs.getString("TAG_LIST", null);
Type listType = new TypeToken<ArrayList<CustomObj>>() {}.getType();
mSomeArraylist= gson.fromJson(json, listType);
return gson.fromJson(json, listType);
}