Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中将列表放入SQLite数据库_Android_Sqlite - Fatal编程技术网

在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的外键。