在Android中将arraylist <string>值插入sqlite

时间:2016-01-10 17:33:07

标签: android sqlite for-loop arraylist android-sqlite

我在listview中有2个不同的arraylist中的名字和id,并希望将arraylist中的id和名称存储到字符串中,然后将它们保存在按钮上,点击sqlite。

以下代码的问题是,当选中2个项目并单击按钮时,项目将插入两次。当id设置为UNIQUE时,在插入3个id时,只有一个保存在sqlite中,...

这是我到目前为止所尝试的:

 public void addSelected(ArrayList<String> selNames, ArrayList<String> selID) {

    SQLiteDatabase db = getWritableDatabase();
    try{

        for (String str: selID){
            for (String stl:selNames){
            ContentValues cv = new ContentValues();
            cv.put(KEY_ID, str);
            cv.put(KEY_STATUS, stl);
            db.insertOrThrow(TABLE_SELECTED, null, cv);

            }
        }
        db.close();
    }catch (Exception e){
        Log.e("Problem", e + " ");
    }


}

3 个答案:

答案 0 :(得分:1)

您正在迭代ID,然后对每个ID迭代所有名称,导致您插入两者的所有组合。相反,您可以迭代两个列表的长度

public void addSelected(ArrayList<String> selNames, ArrayList<String> selID) {

    int size = selNames.size();

    // Check that both lists have the same size
    if (size != selID.size()) {
        throw new IllegalArgumentException();
        // Or some more elegant way to handle this error condition
    }

    SQLiteDatabase db = getWritableDatabase();
    try{
        for (int i = 0; i < size; ++i) {
            ContentValues cv = new ContentValues();
            cv.put(KEY_ID, selID.get(i));
            cv.put(KEY_STATUS, selNames.get(i));
            db.insertOrThrow(TABLE_SELECTED, null, cv);
        }
        db.close();
    } catch (Exception e){
        Log.e("Problem", e + " ");
    }
}

注意:对db.close()的调用可能应该在finally块中,而不是try块中。我把它留在那里就像它在OP中一样,因为这不是问题的问题,但你也应该在你的真实代码中处理它。

答案 1 :(得分:1)

我认为你应该只是尝试这个,如果你的两个数组都是相同的大小...并且还像db这样在db.insertorThrow传递你的cv

public void addSelected(ArrayList<String> selList, ArrayList<String> selID){

        int size = selID.size();

        SQLiteDatabase db = getWritableDatabase();
       try{
       for (int i = 0; i < size ; i++){
            ContentValues cv = new ContentValues();
           cv.put(KEY_ID, selID.get(i));
             cv.put(KEY_STATUS, selList.get(i));
            Log.d("Added ",""+ cv);
            db.insertOrThrow(TABLE_SELECTED, null, cv);
        }  
db.close();
    }catch (Exception e){
        Log.e("Problem", e + " ");
    }

答案 2 :(得分:1)

如果你想在没有迭代的情况下放置数组列表,你可以执行以下方法。

/ 此代码可用于插入 /

JSONObject json = new JSONObject();// Create one Jsonobject
json.put("uniqueArrays", new JSONArray(items));// put the ArrayList You have in hand by converting that to JSONArray.
String arrayList = json.toString();//Convert json to string

/ 此代码可用于获取数据 /

 JSONObject json = new JSONObject(stringreadfromsqlitetable);// Convert the String to JsonObject
  ArrayList items = json.optJSONArray("uniqueArrays");// Conver the jsonObject to Arraylist