ContentUris 是 Android SDK 中提供的一个实用工具类,主要用于处理 ContentUri(内容 URI)中的 ID 部分。内容 URI 通常用于与 ContentProvider 交互,ContentUris 类提供了一些方法来方便地操作内容 URI 的路径和 ID 部分。
ContentUris 类的常用方法
-
parseId(Uri contentUri)- 功能: 将内容 URI 的最后一个路径段(通常是 ID)转换为
long类型。 - 用法: 通常用于从内容 URI 中提取唯一的记录 ID。
- 示例:
Uri uri = Uri.parse("content://com.example.provider/contacts/10"); long id = ContentUris.parseId(uri); // 返回 10
- 功能: 将内容 URI 的最后一个路径段(通常是 ID)转换为
-
appendId(Uri.Builder builder, long id)- 功能: 将给定的 ID 附加到 URI 构建器的路径末尾。
- 用法: 用于动态构建带有特定 ID 的内容 URI。
- 示例:
Uri.Builder builder = new Uri.Builder().scheme("content").authority("com.example.provider").appendPath("contacts"); Uri uri = ContentUris.appendId(builder, 20).build(); // 生成的 URI 为 content://com.example.provider/contacts/20
-
withAppendedId(Uri contentUri, long id)- 功能: 返回一个新的 URI,在给定的内容 URI 末尾附加一个指定的 ID。
- 用法: 用于创建指向特定记录的内容 URI。
- 示例:
Uri baseUri = Uri.parse("content://com.example.provider/contacts"); Uri uriWithId = ContentUris.withAppendedId(baseUri, 15); // 生成的 URI 为 content://com.example.provider/contacts/15
-
removeId(Uri contentUri)- 功能: 从 URI 路径的末尾移除 ID,返回一个不包含 ID 的 URI。
- 用法: 当你想从指向特定记录的 URI 中移除 ID 以获得泛型 URI 时使用。
- 示例:
Uri uriWithId = Uri.parse("content://com.example.provider/contacts/30"); Uri uriWithoutId = ContentUris.removeId(uriWithId); // 生成的 URI 为 content://com.example.provider/contacts
ContentUris 类使用示例
以下是一个综合使用 ContentUris 类的例子,演示如何构建、解析和修改 ContentUri。
public class ExampleUsage {
public void contentUrisExample() {
// 创建一个基础 URI
Uri baseUri = Uri.parse("content://com.example.provider/contacts");
// 使用 withAppendedId() 附加一个 ID
Uri uriWithId = ContentUris.withAppendedId(baseUri, 42);
System.out.println("URI with ID: " + uriWithId.toString());
// 输出: content://com.example.provider/contacts/42
// 使用 parseId() 解析 ID
long id = ContentUris.parseId(uriWithId);
System.out.println("Parsed ID: " + id);
// 输出: 42
// 使用 removeId() 移除 ID
Uri uriWithoutId = ContentUris.removeId(uriWithId);
System.out.println("URI without ID: " + uriWithoutId.toString());
// 输出: content://com.example.provider/contacts
}
}
解释
withAppendedId()用于构建一个特定记录的 URI(如联系人 ID 为 42 的联系人)。parseId()从 URI 中提取出 ID,便于后续操作(如查询数据库中特定的记录)。removeId()将 URI 还原为不带 ID 的形式,以便执行如获取所有记录的操作。
总结
ContentUris类提供了简洁的 API 用于操作ContentUri中的 ID 部分。- 它简化了常见的任务,如从 URI 中提取 ID、构建包含特定 ID 的 URI,以及从 URI 中移除 ID。
- 在开发与
ContentProvider交互的应用时,ContentUris是一个非常实用的工具类。