`

【Android】Uri、UriMatcher、ContentUris详解

 
阅读更多

来自CSDN Blog : feng88724的专栏 2011-04-18

1.Uri

通用资源标志符(Universal Resource Identifier, 简称"URI")。

Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。

URI一般由三部分组成:

访问资源的命名机制。

存放资源的主机名。

资源自身的名称,由路径表示。

Android的Uri由以下三部分组成: "content://"、数据的路径、标示ID(可选)

举些例子,如:

所有联系人的Uri: content://contacts/people

某个联系人的Uri: content://contacts/people/5

所有图片Uri: content://media/external

某个图片的Uri:content://media/external/images/media/4

我们很经常需要解析Uri,并从Uri中获取数据。

Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris

虽然这两类不是非常重要,但是掌握它们的使用,会便于我们的开发工作。

下面就一起看一下这两个类的作用。

2.UriMatcher

UriMatcher 类主要用于匹配Uri.

使用方法如下。

首先第一步,初始化:

第二步注册需要的Uri:

第三部,与已经注册的Uri进行匹配:

match方法匹配后会返回一个匹配码Code,即在使用注册方法addURI时传入的第三个参数。

上述方法会返回"vnd.android.cursor.dir/person".

总结:

--常量 UriMatcher.NO_MATCH 表示不匹配任何路径的返回码

--# 号为通配符

--* 号为任意字符

另外说一下,官方SDK说明中关于Uri的注册是这样写的:

这个说明估计已经是Google官方没有更新,首先是初始化方法,没有传参,那么现在初始化时,实际是必须传参的。 可以看一下Android2.2的源码,无参数的构造方法已经是private的了。

另外就是addURI这个方法,第二个参数开始时不需要"/", 否则是无法匹配成功的。

3.ContentUris

ContentUris 类用于获取Uri路径后面的ID部分

1)为路径加上ID: withAppendedId(uri, id)

比如有这样一个Uri

通过withAppendedId方法,为该Uri加上ID

最后resultUri为: content://com.yfz.Lesson/people/10

2)从路径中获取ID: parseId(uri)

最后personid 为 :10

附上实验的代码:

好了,就讲这么多。

分享到:
评论

相关推荐

    Android Uri

    "Android Uri详解" Android Uri是Android系统中的一种通用资源标志符(Universal Resource Identifier, 简称"URI"),它代表要操作的数据。Android 上可用的每种资源 - 图像、视频片段等都可以用 Uri 来表示。Uri ...

    Android contentprovider总结

    #### 三、UriMatcher 与 ContentUris 使用详解 **1. UriMatcher** - **用途**:用于匹配特定的 URI,以确定执行何种类型的请求。 - **使用步骤**: - 创建 `UriMatcher` 实例并初始化。 - 使用 `addURI()` 方法...

    免费下载:android ContentProvider详细解析

    ### android ContentProvider 详解 #### 一、ContentProvider 概述 ContentProvider 是 Android 四大组件之一,它主要用于在不同的应用程序之间实现数据共享。在 Android 中,每个应用程序都有自己的私有存储空间...

    android数据库共享技术

    ### Android数据库共享技术详解 #### 一、引言 随着移动应用开发的不断发展,数据存储与管理成为Android应用开发中的重要组成部分。SQLite作为一款轻量级的嵌入式数据库,因其小巧灵活的特点,在Android开发中得到...

    contentResolver数据库操作.docx

    Uri noteUri = ContentUris.withAppendedId(CONTENT_URI, rowId); getContext().getContentResolver().notifyChange(noteUri, null); return noteUri; } else { throw new SQLException("Failed to insert row ...

Global site tag (gtag.js) - Google Analytics