Content URI(内容URI)在Android开发中用于标识ContentProvider中的数据。它们包括内容提供者的标识符和路径,用于指定要访问的表或数据行。下面将详细讲解Content URI的格式及其组成部分。
Content URI的格式
Content URI的通用格式如下:
content://authority/path/id
content://:URI的方案,表明这是一个内容URI。authority:内容提供者的唯一标识符,通常是应用程序的包名。path:指定内容提供者中的表或数据集。id(可选):指定内容提供者中的特定数据行。
组成部分详细解释
-
Scheme(方案)
content://:每个Content URI都以content://开头,表示这是一个内容URI。它是URI的固定前缀。 -
Authority(授权)
authority:这是内容提供者的唯一标识符,通常是应用程序的包名。系统通过authority找到相应的ContentProvider。例如,用户词典提供者的authority是user_dictionary。示例:
content://com.example.app.provider -
Path(路径)
path:路径部分指定内容提供者中的表或数据集。路径可以有多个层级,用斜杠(/)分隔。例如,对于一个包含多个表的内容提供者,每个表都有自己的路径。示例:
content://com.example.app.provider/table1 content://com.example.app.provider/table2 -
ID(标识符)
id:可选部分,用于指定表中的特定数据行。通过在路径末尾附加行的ID,可以访问特定的行。示例:
content://com.example.app.provider/table1/1
示例解释
假设我们有一个内容提供者管理火车时刻表,内容提供者的authority是com.example.trains,它包含两个表:Table1和Table1。
-
访问
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,应用程序可以有效地执行数据的查询、插入、更新和删除操作,实现应用程序之间的数据共享和交互。