在android中将列表放入SQLite数据库
我有一个在android中将列表放入SQLite数据库,android,sqlite,Android,Sqlite,我有一个列表,我想把它放到SQLite数据库中 我读过其他一些帖子,说需要将列表转换为JSONArray,并将其存储为数组中的文本字段,但我是一个初学者,这让人非常困惑 到目前为止,我有一个方法如下: public JSONArray void toJSON() { JSONArray jsonArray = new JSONArray(myList); return jsonArray } 然后在我的sqlite数据库中,我说: ContentValues values = new Cont
列表
,我想把它放到SQLite数据库中
我读过其他一些帖子,说需要将列表转换为JSONArray,并将其存储为数组中的文本字段,但我是一个初学者,这让人非常困惑
到目前为止,我有一个方法如下:
public JSONArray void toJSON() {
JSONArray jsonArray = new JSONArray(myList);
return jsonArray
}
然后在我的sqlite数据库中,我说:
ContentValues values = new ContentValues();
values.put(KEY_CONTACTS, group.toJSON());
但是我得到一个错误,说ContentValues类型中的方法put(String,String)不适用于参数(String,JSONArray)。但是我不知道如何正确地把它连接起来。任何帮助都将不胜感激。这里有一个示例代码,希望它能帮助您
class Contact {
public int id,
public String name;
public String phone;
}
class ContactColumns {
public static final String ID = "_id";
public static final String NAME = "name";
public static final String PHONE = "phone";
}
private List<ContentValues> buildContentValueList(String jsonStr) {
if (TextUtils.isEmpty(jsonStr)) {
return null;
}
List<ContentValues> list = new ArrayList<ContentValues>();
JSONArray jsonArray = new JSONArray(jsonStr);
for (i = 0; i< jsonArray.length(); i++) {
JSONObject jb = jsonArray.optJSONObject(i);
if (jb == null) {
continue;
}
ContentValues values = new ContentValues();
values.put(ContactColumns.ID, jb.optInt("ID_KEY"));
values.put(ContactColumns.NAME, jb.optString("NAME_KEY"));
values.put(ContactColumns.PHONE, jb.optString("PHONE_KEY"));
list.add(contact);
}
return list;
}
public void insertContact(List<ContentValues> valueList) {
if (valueList.size() > 0) {
ContentValues[] valueArray = new ContentValues[valueList.size()];
valueArray = valueList.toArray(valueArray);
getContentResolver().bulkInsert(ContactTable.URI, valueArray);
}
}
you can call insertContact(buildContentValueList(jsonString)) to complete, that's all.
class联系人{
公共int id,
公共字符串名称;
公用串电话;
}
类ContactColumns{
公共静态最终字符串ID=“\u ID”;
公共静态最终字符串NAME=“NAME”;
公共静态最终字符串PHONE=“PHONE”;
}
私有列表buildContentValueList(字符串jsonStr){
if(TextUtils.isEmpty(jsonStr)){
返回null;
}
列表=新的ArrayList();
JSONArray JSONArray=新JSONArray(jsonStr);
对于(i=0;i0){
ContentValues[]valueArray=新的ContentValues[valueList.size()];
valueArray=valueList.toArray(valueArray);
getContentResolver().bulkInsert(ContactTable.URI,valueArray);
}
}
您可以调用insertContact(buildContentValueList(jsonString))来完成,仅此而已。
您可以调用JSONArray#toString()
来获取JSON数组的字符串
表示形式。然而,将联系人列表存储为一行数据库中的JSON数组似乎有点可疑……为什么不循环浏览联系人对象列表并通过contentValues将其插入数据库?@Matthew yeah我同意你的看法,但我想不出任何其他方法。我有一个想法,也许不是每个组都有一个联系人列表,而是每个联系人都可以有一个字符串字段来表示他们所在的组。唯一的缺点是,我不能在多个组中拥有联系人,因为这样我就需要一个字符串数组来存储在联系人数据库中。这与在groups数据库中存储列表几乎相同。这是个难题。@Razgriz你能给我一些示例代码吗?我不太清楚你的意思。@Clay可能是一个好主意,为Contacts表中的每个联系人创建一个引用组ID的外键。