持久化列表的最有效方法是什么?
What is the most efficient way of persisting lists?
我正在创建一个 Android 应用程序,允许用户创建不同的朋友列表。对于每个列表,项目都有一个名称和 2 个参数...
示例
列表 1:(史蒂夫,参数 1,参数 2),(丽莎,参数 1,参数 2)...等
列表 2:(约翰,参数 1,参数 2),(史蒂夫,参数 1,参数 2)...等
...
动态保存用户创建的所有这些列表的最佳方式是什么?
我正在考虑使用 SQLite,因为它很容易实现。
我也考虑过使用纯 JSON 文件,但这种方法似乎太耗费资源,因为应用程序处理添加、读取、修改内容...
那么,持久化这些对象的最佳方式是什么?
如果我用数据库的话,我觉得应该是下面的方案:
PERSONS - 列:Person_ID、Person_Name
LISTS - 列:列表
对于 LISTS,每一行仅由某种元组集组成,代表一个列表。
示例
第 1 行:[(Person_ID, param1, param2), (Person_ID, param1, param2), ...]
其中第 1 行是一个列表,其中包含所有人员。
不幸的是,这似乎不是很有效....
我也考虑过创建一个额外的 table
LIST_ROW - 列:row_id、Person_ID、param1、param2
然后列表 table 中的每一行将只是属于该列表的所有行的 ID 元组...
示例
第 1 行将变为:(row_id, row_id.....) 表示列表 1.
中的元素
不幸的是,我不确定这有多有效。
谁能告诉我实现此目标的最佳方法是什么?
如果数据不大,可以保存在sharedpreference里,
例如:
首先定义数据bean,
第二个将数据 bean 添加到 arraylist
然后保存到 sp:
saveObject("list_one", list);
/**
* Save object to SharedPreferences
*
* @param key
* @param obj
*/
protected void saveObject(String key, Object obj) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
String str = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key, str);
editor.commit();
} catch (IOException e) {
e.toString();
}
}
/**
* Read object from SharedPreferences
*
* @param key
* @return object
*/
protected Object getObject(String key) {
try {
String str = sp.getString(key, "");
ByteArrayInputStream baim = new ByteArrayInputStream(Base64.decode(str, Base64.DEFAULT));
ObjectInputStream ois = new ObjectInputStream(baim);
return ois.readObject();
} catch (Exception e) {
}
return null;
}
您可以为此使用共享首选项。将您的列表转换为字符串(逗号分隔的对象和值),然后添加这是共享首选项。以同样的方式,您可以获得它并转换为您的列表。
我正在创建一个 Android 应用程序,允许用户创建不同的朋友列表。对于每个列表,项目都有一个名称和 2 个参数...
示例
列表 1:(史蒂夫,参数 1,参数 2),(丽莎,参数 1,参数 2)...等
列表 2:(约翰,参数 1,参数 2),(史蒂夫,参数 1,参数 2)...等 ...
动态保存用户创建的所有这些列表的最佳方式是什么?
我正在考虑使用 SQLite,因为它很容易实现。
我也考虑过使用纯 JSON 文件,但这种方法似乎太耗费资源,因为应用程序处理添加、读取、修改内容...
那么,持久化这些对象的最佳方式是什么?
如果我用数据库的话,我觉得应该是下面的方案:
PERSONS - 列:Person_ID、Person_Name
LISTS - 列:列表
对于 LISTS,每一行仅由某种元组集组成,代表一个列表。
示例
第 1 行:[(Person_ID, param1, param2), (Person_ID, param1, param2), ...]
其中第 1 行是一个列表,其中包含所有人员。
不幸的是,这似乎不是很有效....
我也考虑过创建一个额外的 table
LIST_ROW - 列:row_id、Person_ID、param1、param2
然后列表 table 中的每一行将只是属于该列表的所有行的 ID 元组...
示例
第 1 行将变为:(row_id, row_id.....) 表示列表 1.
中的元素不幸的是,我不确定这有多有效。
谁能告诉我实现此目标的最佳方法是什么?
如果数据不大,可以保存在sharedpreference里, 例如: 首先定义数据bean, 第二个将数据 bean 添加到 arraylist 然后保存到 sp:
saveObject("list_one", list);
/**
* Save object to SharedPreferences
*
* @param key
* @param obj
*/
protected void saveObject(String key, Object obj) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
String str = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key, str);
editor.commit();
} catch (IOException e) {
e.toString();
}
}
/**
* Read object from SharedPreferences
*
* @param key
* @return object
*/
protected Object getObject(String key) {
try {
String str = sp.getString(key, "");
ByteArrayInputStream baim = new ByteArrayInputStream(Base64.decode(str, Base64.DEFAULT));
ObjectInputStream ois = new ObjectInputStream(baim);
return ois.readObject();
} catch (Exception e) {
}
return null;
}
您可以为此使用共享首选项。将您的列表转换为字符串(逗号分隔的对象和值),然后添加这是共享首选项。以同样的方式,您可以获得它并转换为您的列表。