关于 Cursor
表面定义为“光标”,实际上可以理解为“数据链指针”.
cursor用行和列(column)构成,是每行的集合。使用前必须知道每列的名称和数据类型(见下常用应用场景)。
关于 Cursor 的重要方法:
· close() 关闭游标,释放资源
· copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) 在缓冲区中检索请求的列的文本,并将其存储。
· getColumnCount() 返回所有列的总数
· getColumnIndex(String columnName) 返回指定列的名称,如果不存在返回-1
· getColumnIndexOrThrow(String columnName) 从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
· getColumnName(int columnIndex) 从给定的索引返回列名
· getColumnNames() 返回一个字符串数组的列名
· getCount() 返回Cursor 中的行数
· moveToFirst() 移动光标到第一行
· moveToLast() 移动光标到最后一行
· moveToNext() 移动光标到下一行
· moveToPosition(int position) 移动光标到一个绝对的位置
· moveToPrevious() 移动光标到上一行
常见应用场景
1. 访问 Cursor 的下标获得其中的数据
Cursor cursor;
int last;
cursor. moveToLast() ;
last = cursor.getInt(cursor.getColumnIndex("LAST")); //知道该列的名称为LAST,数据类型为int型。
2.
循环 Cursor 取出我们需要的数据
if (cursor.getCount() > 0) {
List<NowaMagic> myList = new ArrayList<NowaMagic>(cursor.getCount());
while (cursor.moveToNext()) {
myList.add(parse(cursor));
}
return myList;
}
当cur.moveToNext() 为假时将跳出循环,即 Cursor 数据循环完毕。
扩展性知识点
用于用到行列,该类常与Columns连用。
代码举例如下:
public static class Columns implements BaseColumns { //该类用于定义列的类型和名称
public static final String FIRST = "first";
public static final String SECOND="second";
...
}
上面定义为列的类,假如取第一列的内容可用以下语句:
public int id;
Cursor cursor;
id= cursor.getInt(Columns.FIRST);