将列表放入android中的SQLite数据库

时间:2013-10-17 02:12:44

标签: android sqlite

我有一个List<Contact>,我想把它放到SQLite数据库中。

我已经阅读了一些其他帖子,说你需要将List转换为JSONArray并将其存储为数组中的TEXT字段,但我是初学者,这一切都非常令人困惑。

到目前为止,我有一个方法如下:

public JSONArray void toJSON() {
JSONArray jsonArray = new JSONArray(myList);
return jsonArray
}

然后在我的sqlite数据库中我说:

ContentValues values = new ContentValues();
        values.put(KEY_CONTACTS, group.toJSON());

但是我收到错误说方法put(String,String)在ContentValues类型中不适用于参数(String,JSONArray)。我不知道如何正确地把它变成一个字符串。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

有一个示例代码,希望它可以帮助你。

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.