📜  从光标 android 获取数据 (1)

📅  最后修改于: 2023-12-03 14:49:21.478000             🧑  作者: Mango

从光标 Android 获取数据

在 Android 开发中,"光标"(Cursor)是一个用于遍历查询结果集的对象,通常用于与数据库交互。通过光标,程序员可以方便地获取、操作和管理结果集中的数据。

光标的基本概念

光标是一个指向查询结果集中某个位置的标记。它维护了一个当前行的指针,并提供了一系列方法来移动指针、读取当前行的数据以及操作结果集。

光标通常与 Cursor 类关联,开发者通过查询数据库或其他提供数据的接口获取光标实例。然后,可以使用光标的诸多方法来访问和处理查询结果。

如何获取光标

获取光标的常用方式有以下几种:

  1. 使用 ContentResolver 查询内容提供器,例如:

    Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
    
  2. 使用 SQLiteDatabase 进行数据库查询,例如:

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
    
  3. 通过 CursorLoader 进行异步查询,例如:

    CursorLoader cursorLoader = new CursorLoader(context, uri, projection, selection, selectionArgs, sortOrder);
    Cursor cursor = cursorLoader.loadInBackground();
    

以上仅是常见的获取光标的方式,具体使用方法可根据实际需求选择。

移动光标

光标提供了多个移动方法,用于将光标的位置移动到结果集中的不同位置。常用的方法包括:

  • moveToFirst():将光标移动到结果集的第一行。
  • moveToLast():将光标移动到结果集的最后一行。
  • moveToNext():将光标移动到结果集中的下一行。
  • moveToPrevious():将光标移动到结果集中的上一行。
  • moveToPosition(int position):将光标移动到指定位置。

读取数据

光标提供了一系列方法来读取当前行的数据。根据数据类型的不同,可以使用不同的读取方法,例如:

  • getString(int columnIndex):读取当前行指定列索引位置的字符串类型数据。
  • getInt(int columnIndex):读取当前行指定列索引位置的整型数据。
  • getLong(int columnIndex):读取当前行指定列索引位置的长整型数据。
  • getFloat(int columnIndex):读取当前行指定列索引位置的浮点型数据。
  • getBlob(int columnIndex):读取当前行指定列索引位置的二进制数据。

另外,也可以通过列名来读取数据,例如 getString(String columnName)

操作结果集

除了读取数据,光标还提供了其他方法来操作结果集,如:

  • getCount():获取结果集中的记录数。
  • getPosition():获取光标当前所在位置的索引。
  • isFirst():判断光标是否指向结果集的第一行。
  • isLast():判断光标是否指向结果集的最后一行。
  • isBeforeFirst():判断光标是否位于结果集之前。
  • isAfterLast():判断光标是否位于结果集之后。
示例代码

以下是一个使用光标从 Android 数据库中获取并显示数据的示例代码片段:

// 使用 ContentResolver 查询联系人数据
ContentResolver resolver = getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.NUMBER};
String selection = null;
String[] selectionArgs = null;
String sortOrder = null;
Cursor cursor = resolver.query(uri, projection, selection, selectionArgs, sortOrder);

// 遍历光标并输出联系人姓名和电话号码
if (cursor != null && cursor.moveToFirst()) {
    StringBuilder result = new StringBuilder();
    int nameColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
    int numberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    
    do {
        String name = cursor.getString(nameColumn);
        String number = cursor.getString(numberColumn);
        
        result.append("联系人姓名:").append(name).append("\n");
        result.append("电话号码:").append(number).append("\n\n");
    } while (cursor.moveToNext());

    cursor.close();
    
    // 在 UI 上显示结果
    textView.setText(result.toString());
}

以上代码演示了如何使用光标从 Android 联系人数据库中获取姓名和电话号码,并在界面上显示出来。

以上就是关于如何从光标 Android 获取数据的介绍。通过光标,您可以方便地进行数据库操作,获取和处理您所需的数据。详细的光标用法可参考 Android 开发文档。

*[SQLiteDatabase]: Android 数据库类 *[CursorLoader]: 用于异步查询的 Android 类 *[UI]: 用户界面