为Android应用程序存储ArrayList内容的最佳方法?
我知道在Android应用程序中有一些保存数据的方法,但我想知道什么是最简单和/或最有效的,或者换句话说哪种方法会在复杂性/合理性/性能的范围内胜出。
基本上我只有两个Class ArrayLists(类对象的ArrayLists,而不是原始数据类型)。 一个ArrayList的对象的构造函数有三个整数,另外四个。 我基本上需要存储那些整数的值(我有每个设置的方法以整数forms返回字符串或整数),并告诉每个整数属于哪个。
例如,如果我有:arrayListOne.get(1).getNumbers()返回1,2,3 arrayListTwo.get(1).getNumbers()返回1,2,3,4
以及一堆返回不同数字的其他索引,如何存储该数据,以便在应用程序关闭并重新启动时重新加载,并且值保持为初始化的索引?
将其写入内部存储是一种解决方案。 您可以在Util类中使用以下作为静态方法:
检索ArrayList:
final static String OBJECT_1_LIST = "object_1_list"; static ArrayList object1List = null; static ArrayList getObject1List(Context mContext) { FileInputStream stream = null; try { stream = mContext.openFileInput(OBJECT_1_LIST); ObjectInputStream din = new ObjectInputStream(stream); object1List = (ArrayList ) din.readObject(); stream.getFD().sync(); stream.close(); din.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } if (object1List == null) { object1List = new ArrayList (); } return object1List; }
同样,要更新ArrayList:
private static void updateObject1List(Context mContext) { FileOutputStream stream = null; try { stream = mContext.openFileOutput(OBJECT_1_LIST, Context.MODE_PRIVATE); ObjectOutputStream dout = new ObjectOutputStream(stream); dout.writeObject(object1List); stream.getFD().sync(); stream.close(); dout.flush(); } catch (IOException e) { e.printStackTrace(); } }
要添加项目:
static void addToObject1list(Context mContext, MyObject1 obj) { Utilities.getObject1List(mContext).add(obj); Utilities.updateObject1List(mContext); }
添加删除项目和清除ArrayList的方法。
您还需要MyObject1
来实现Serializable
:
public class MyObject1 implements Serializable { .... .... }
我发现将对象保存为JSON字符串非常简单有效。 查看GSON库。 它将从JSON转换为java和java回到JSON,只需要很少的function。
https://code.google.com/p/google-gson/
我喜欢GSON做这件事。