没有合适的资源?快使用搜索试试~ 我知道了~
免费下载:android ContentProvider详细解析
需积分: 9 23 下载量 173 浏览量
2012-04-24
10:23:53
上传
评论
收藏 186KB DOC 举报
温馨提示
试读
13页
免费下载:android ContentProvider详细解析 讲得好详细
资源推荐
资源详情
资源评论
ContentProvider 解析
一、ContentProvider 简介
当应用继承 ContentProvider 类,并重写该类用于提供数据和存储数据的方法,就可以向
其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据
存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用
sharedpreferences 共享数据,需要使用 sharedpreferences API 读写数据。而使用
ContentProvider 共享数据的好处是统一了数据访问方式。
二、Uri 类简介
Uri 代表了要操作的数据,Uri 主要包含了两部分信息:
1、需要操作的 ContentProvider ;
2、对 ContentProvider 中的什么数据进行操作,一个 Uri 由以下几部分组成:
1)scheme:ContentProvider(内容提供者)的 scheme 已经由 Android 所规定为:
content://。
2)主机名(或 Authority):用于 唯一标识这个 ContentProvider,外部调用者可以根
据这个标识来找到它。
3)路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如
下:
• 要操作 contact 表中 id 为 10 的记录,可以构建这样的路径:/contact/10
• 要操作 contact 表中 id 为 10 的记录的 name 字段, contact/10/name
• 要操作 contact 表中的所有记录,可以构建这样的路径:/contact
要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:
要操作 xml 文件中 contact 节点下的 name 节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成 Uri,可以使用 Uri 类中的 parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
三、UriMatcher、ContentUrist 和 ContentResolver 简介
因为 Uri 代表了要操作的数据,所以我们经常需要解析 Uri,并从 Uri 中获取数据。
Android 系统提供了两个用于操作 Uri 的工具类,分别为 UriMatcher 和 ContentUris 。掌
握它们的使用,会便于我们的开发工作。
UriMatcher:用于匹配 Uri,它的用法如下:
1、首先把你需要匹配 Uri 路径全部给注册上,如下:
//常量 UriMatcher.NO_MATCH 表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
1)如果 match()方法匹配下面的路径:
content://com.changcheng.sqlite.provider.contactprovider/contact 路径,
返回匹配码为 1
2)下面代码是添加需要匹配 uri,如果匹配就会返回匹配码;
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);
3)如果 match()方法匹配
content://com.changcheng.sqlite.provider.contactprovider/contact/230
路径,返回匹配码为 2;
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);
其中#号为通配符。
2、注册完需要匹配的 Uri 后,就可以使用 uriMatcher.match(uri)方法对输入的 Uri 进
行匹配,如果匹配就返回匹配码,匹配码是调用 addURI()方法传入的第三个参数,假设匹
配 content://com.changcheng.sqlite.provider.contactprovider/contact 路径,返回的匹配码为
1。
ContentUris:用于获取 Uri 路径后面的 ID 部分,它有两个比较实用的方法:
• withAppendedId(uri, id)用于为路径加上 ID 部分
• parseId(uri)方法用于从路径中获取 ID 部分
ContentResolver:当外部应用需要对 ContentProvider 中的数据进行添加、删除、修改
和查询操作时,可以使用 ContentResolver 类来完成,要获取 ContentResolver 对象,可以
使用 Activity 提供的 getContentResolver()方法。 ContentResolver 使用
insert、delete、update、query 方法,来操作数据。
四、ContentProvider 示例程序
Manifest.xml 中的代码:
view source print ?
0
1
<application
android:icon="@drawable/icon"android:label="@string/app_name">
0
2
<activity
android:name=".TestWebviewDemo"android:label="@string/app_name"
>
0
3
<intent-
filter>
0
4
<action
android:name="android.intent.action.MAIN"/>
0
5
<category
android:name="android.intent.category.LAUNCHER"/>
0
6
</intent-
filter>
0
7
<intent-
filter>
0
8
<data
android:mimeType="vnd.android.cursor.dir/vnd.ruixin.login"/>
0 </intent-
9 filter>
1
0
<intent-
filter>
1
1
<data
android:mimeType="vnd.android.cursor.item/vnd.ruixin.login"/>
1
2
</intent-
filter>
1
3
1
4
</activit
y>
1
5
<provider
android:name="MyProvider"android:authorities="com.ruixin.login"
/>
1
6
</applicatio
n>
需要在<application></application>中为 provider 进行注册!!!!
首先定义一个数据库的工具类:
view source print ?
0
1
publicclassRuiXin
{
0
2
0
3
publicstaticfinalString DBNAME
="ruixinonlinedb";
0
4
publicstaticfinalString TNAME
="ruixinonline";
0
5
publicstaticfinalintVERSION
=3;
0
6
0
7
publicstaticString TID
="tid";
0
8
publicstaticfinalString EMAIL
="email";
0
9
publicstaticfinalString USERNAME
="username";
1
0
publicstaticfinalString DATE
="date";
1
1
publicstaticfinalString SEX
="sex";
1
2
剩余12页未读,继续阅读
资源评论
偶是江湖中人
- 粉丝: 113
- 资源: 294
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功