Content URI 讲解

172 阅读2分钟

Content URI(内容URI)在Android开发中用于标识ContentProvider中的数据。它们包括内容提供者的标识符和路径,用于指定要访问的表或数据行。下面将详细讲解Content URI的格式及其组成部分。

Content URI的格式

Content URI的通用格式如下:

content://authority/path/id
  • content://:URI的方案,表明这是一个内容URI。
  • authority:内容提供者的唯一标识符,通常是应用程序的包名。
  • path:指定内容提供者中的表或数据集。
  • id(可选):指定内容提供者中的特定数据行。

组成部分详细解释

  1. Scheme(方案)

    content://:每个Content URI都以content://开头,表示这是一个内容URI。它是URI的固定前缀。

  2. Authority(授权)

    authority:这是内容提供者的唯一标识符,通常是应用程序的包名。系统通过authority找到相应的ContentProvider。例如,用户词典提供者的authorityuser_dictionary

    示例:

    content://com.example.app.provider
    
  3. Path(路径)

    path:路径部分指定内容提供者中的表或数据集。路径可以有多个层级,用斜杠(/)分隔。例如,对于一个包含多个表的内容提供者,每个表都有自己的路径。

    示例:

    content://com.example.app.provider/table1
    content://com.example.app.provider/table2
    
  4. ID(标识符)

    id:可选部分,用于指定表中的特定数据行。通过在路径末尾附加行的ID,可以访问特定的行。

    示例:

    content://com.example.app.provider/table1/1
    

示例解释

假设我们有一个内容提供者管理火车时刻表,内容提供者的authoritycom.example.trains,它包含两个表:Table1Table1

  • 访问Table1表的所有数据:

    content://com.example.trains/Table1
    
  • 访问Table1表中的特定行(假设ID为5):

    content://com.example.trains/Table2/5
    

Content URI的使用

在代码中的使用

在Android代码中,通常通过常量定义内容URI。例如:

public static final Uri CONTENT_URI = Uri.parse("content://com.example.trains/Table1");

然后使用ContentResolver执行CRUD操作。

查询数据:

Cursor cursor = getContentResolver().query(
        CONTENT_URI,       // 要查询的内容URI
        projection,        // 要返回的列
        selection,         // 选择条件
        selectionArgs,     // 选择条件的参数
        sortOrder          // 排序方式
);

插入数据:

ContentValues values = new ContentValues();
values.put("column_name", "value");
Uri newUri = getContentResolver().insert(CONTENT_URI, values);

更新数据:

ContentValues values = new ContentValues();
values.put("column_name", "new_value");
int rowsUpdated = getContentResolver().update(
        CONTENT_URI,       // 要更新的内容URI
        values,            // 新值
        selection,         // 选择条件
        selectionArgs      // 选择条件的参数
);

删除数据:

int rowsDeleted = getContentResolver().delete(
        CONTENT_URI,       // 要删除的内容URI
        selection,         // 选择条件
        selectionArgs      // 选择条件的参数
);

总结

Content URI是Android中访问ContentProvider的关键,它通过唯一的authority标识内容提供者,通过路径指定要访问的数据表或数据集,通过可选的ID指定特定数据行。通过定义和使用Content URI,应用程序可以有效地执行数据的查询、插入、更新和删除操作,实现应用程序之间的数据共享和交互。