1. 什么是Cursor
Cursor就是游标,可以理解为我们在输入文本框闪烁的光标,标记我们要输入的位置。那什么是光标呢 这个一闪一闪的竖线就是光标。而我们的Cursor也是用来标记位置,标记我们要读取数据的位置。
2. Cursor对象获取
我们这里用内容提供者进行举例。
String[] columns = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.MIME_TYPE, MediaStore.Files.FileColumns.SIZE, MediaStore.Files.FileColumns.DATE_MODIFIED, MediaStore.Files.FileColumns.DATA};
ContentResolver contentResolver = getActivity().getContentResolver();
Cursor cursor = contentResolver.query(MediaStore.Files.getContentUri("external"), columns, filename, null, null);
假如说上述的语句让我们获取到了一张表,如下所示 那此时cursor指向的就是它。
3. 使用Cursor对象
在我们查看网上的代码例子的时候回法先,使用它之前总会先执行这样一句代码
cursor.moveToNext()
或这样一句代码
cursor.moveToFirst()
在上文说到Cursor的作用就像是光标一样,用来标记我们获取数据的位置,然而刚获取到数据的时候指向的是索引为-1的数据。就像下图所示。 因此我们在使用的时候先要让他向下移动一行。
- moveToFirst调用的是moveToPosition(0)
- moveToNext调用的是moveToPosition(mPos+1)
第一次调用的话,这两句话的意思是一样的(开始mPos=-1)。下面列举一些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():移动光标到上一行
下面列举一个通过内容提供者查找手机中的文档文件的例子
String[] columns = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.MIME_TYPE, MediaStore.Files.FileColumns.SIZE, MediaStore.Files.FileColumns.DATE_MODIFIED, MediaStore.Files.FileColumns.DATA};
ContentResolver contentResolver = getActivity().getContentResolver();
Cursor cursor = contentResolver.query(MediaStore.Files.getContentUri("external"), columns, filename, null, null);
int columnIndexOrThrow_DATA = 0;
if (cursor != null) {
columnIndexOrThrow_DATA = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
}
if (cursor != null) {
while (cursor.moveToNext()) {
String path = cursor.getString(columnIndexOrThrow_DATA);
FileIF document = FileUtils.getFileInfoFromFile(new File(path));
pdfData.add(0, document);
}
}
cursor.close();
|