ContentUris 类讲解

115 阅读2分钟

ContentUris 是 Android SDK 中提供的一个实用工具类,主要用于处理 ContentUri(内容 URI)中的 ID 部分。内容 URI 通常用于与 ContentProvider 交互,ContentUris 类提供了一些方法来方便地操作内容 URI 的路径和 ID 部分。

ContentUris 类的常用方法

  1. parseId(Uri contentUri)

    • 功能: 将内容 URI 的最后一个路径段(通常是 ID)转换为 long 类型。
    • 用法: 通常用于从内容 URI 中提取唯一的记录 ID。
    • 示例:
      Uri uri = Uri.parse("content://com.example.provider/contacts/10");
      long id = ContentUris.parseId(uri);  // 返回 10
      
  2. 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
      
  3. 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
      
  4. 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 是一个非常实用的工具类。