将游标数据复制到arraylist中

时间:2016-05-05 12:54:06

标签: android sqlite arraylist cursor android-sqlite

我有一个查询,它在android sqlite中填充数据库表规则中的光标。 当我在光标上使用getcount时它会显示24,这意味着光标中有24行。我想要的是游标中的所有数据应该被复制到多维数组或arraylist,或者换句话说,数据库表的副本被复制到数组列表中。

c = obj_db.rawQuery("select * from rules", null);
int count=c.getCount();
String x= String.valueOf(count);

我希望数据的副本如数据列表中的表格那样简短

4 个答案:

答案 0 :(得分:7)

这样做

ArrayList<String> mArrayList = new ArrayList<String>();
c.moveToFirst();
while(!c.isAfterLast()) {
     mArrayList.add(c.getString(c.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
     c.moveToNext();
}

这里重要的一行是

mArrayList.add(c.getString(c.getColumnIndex(KEY_NAME))); 

这里我从光标中获取字符串,该字符串位于名为KEY_NAME的列中,您可以根据您的数据获取getInt等。只需使用相应的列名。

编辑。

这是一个例子。您可以创建自定义的行类型列表,并像这样添加数据。

if (cursor != null && cursor.moveToFirst()) {
            //get columns
            int titleColumn = cursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media.TITLE);
            int idColumn = cursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media._ID);
            int artistColumn = cursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media.ARTIST);
            int albumID = cursor.getColumnIndex
                    (MediaStore.Audio.Media.ALBUM_ID);
            int albumColumn = cursor.getColumnIndex
                    (MediaStore.Audio.Media.ALBUM);
            //add row to list
            do {
                long thisId = cursor.getLong(idColumn);
                String thisTitle = cursor.getString(titleColumn);
                String thisArtist = cursor.getString(artistColumn);
                String thisAlbum = cursor.getString(albumColumn);
                String thisAlbumID = cursor.getString(albumID)
                if (thisAlarm + thisNoti + thisRing==0)
                    arrayList.add(new Row(thisId, thisTitle, thisArtist, thisAlbum, thisAlbumID));
            }
            while (cursor.moveToNext());
            cursor.close();
        }

答案 1 :(得分:6)

您必须创建Java模型类。它应该包含表的所有列的字段。

然后逐行遍历游标。对于每一行,从光标获取所有列并创建模型对象。然后将该对象添加到ArrayList。

Java模型类:

public class MyData {
    String column1;
    String column2;

    public MyData(String column1, String column2){
        this.column1 = column1;
        this.column2 = column2;
    }
}

迭代光标并添加到列表中:

List<MyData> list = new ArrayList<>();

while(cursor.moveToNext()) {
    String column1 = cursor.getString(cursor.getColumnIndex(COLUMN_NAME1));
    String column2 = cursor.getString(cursor.getColumnIndex(COLUMN_NAME2));
    MyData data = new MyData(column1, column2);
    list.add(data);
}

更新

如果您不想拥有Java模型类,可以使用列表列表。

List<List> outerList = new ArrayList<>();
List<Object> innerList = new ArrayList<>();

    while(cursor.moveToNext()) {
        String column1 = cursor.getString(cursor.getColumnIndex(COLUMN_NAME1));
        String column2 = cursor.getString(cursor.getColumnIndex(COLUMN_NAME2));
        innerList.add(column1);
        innerList.add(column2);
        outerList.add(innerList);
    }

但是,我建议使用第一种利用Java模型类的方法。

答案 2 :(得分:1)

你需要循环到光标。

这样的东西
while (c.moveToNext()) {
    // The instruction to read the data into the cursor
    // int a = c.getString(0);
}

答案 3 :(得分:0)

有多种方式to iterate cursor

如果您想显示数据,请尝试SimpleCursorAdapter

对于多维数组,您可以修改SimpleCursorAdapter,只需在the source code中获取想法。