将游标数据复制到 arraylist
Copying cursor data into arraylist
我有一个查询,它在 android sqlite 中根据数据库 table 的规则填充游标。
当我在光标上使用 getcount
时,它显示 24,这意味着光标中有 24 行。我想要的是游标中的所有数据都应该复制到多维数组或数组列表,或者换句话说,将数据库 table 的副本复制到数组列表中。
c = obj_db.rawQuery("select * from rules", null);
int count=c.getCount();
String x= String.valueOf(count);
简而言之,我想要数组列表中 table 中的数据副本
您需要循环进入游标。
类似
while (c.moveToNext()) {
// The instruction to read the data into the cursor
// int a = c.getString(0);
}
有多种方式to iterate cursor。
如果您想显示数据,请尝试 SimpleCursorAdapter。
关于多维数组可以修改SimpleCursorAdapter,在the source code.
中了解一下
这样做
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();
}
您必须创建一个 Java 模型 class。它应该包含 table 的所有列的字段。
然后逐行遍历游标。对于每一行,从游标中获取所有列并创建模型对象。然后将该对象添加到 ArrayList。
Java 型号 class:
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 模型 class,您可以使用列表列表。
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 模型 class。
我有一个查询,它在 android sqlite 中根据数据库 table 的规则填充游标。
当我在光标上使用 getcount
时,它显示 24,这意味着光标中有 24 行。我想要的是游标中的所有数据都应该复制到多维数组或数组列表,或者换句话说,将数据库 table 的副本复制到数组列表中。
c = obj_db.rawQuery("select * from rules", null);
int count=c.getCount();
String x= String.valueOf(count);
简而言之,我想要数组列表中 table 中的数据副本
您需要循环进入游标。
类似
while (c.moveToNext()) {
// The instruction to read the data into the cursor
// int a = c.getString(0);
}
有多种方式to iterate cursor。
如果您想显示数据,请尝试 SimpleCursorAdapter。
关于多维数组可以修改SimpleCursorAdapter,在the source code.
中了解一下这样做
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();
}
您必须创建一个 Java 模型 class。它应该包含 table 的所有列的字段。
然后逐行遍历游标。对于每一行,从游标中获取所有列并创建模型对象。然后将该对象添加到 ArrayList。
Java 型号 class:
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 模型 class,您可以使用列表列表。
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 模型 class。