安卓学习笔记——ContentProvider(内容提供者)

本文介绍Android中ContentProvider的用途及原理,包括如何自定义ContentProvider并实现数据的增删改查。通过实例演示如何创建SQL数据库,定义Uri,以及实现ContentProvider的方法。

一、ContentProvider用处:

1、想在自己的程序中使用其他程序的数据 ,比如使用系统通过ContentProvider暴露给我们程序的数据(联系人、短信等)
2、将自己的程序的数据暴露出去,以供其他程序操作使用。可以通过ContentProvider指定所要所要暴露的数据,从而避免了数据的泄露

二、ContentProvider简单使用原理:

通过自己的APP实现ContentProvider类,然后注册一个Uri,然后其他程序就可以通过ContentResolver类操作我们自己APP中的数据了。

ContentProvider简单原理图

三、Uri:统一资源标识符(应用程序中每一种资源的名字)

ContentProvider为数据定义一个Uri,提供统一的操作接口,其他程序可以通过此Uri访问指定的数据进行增、删、改、查。之后其它应用程序对数据进行查询或修改时,只要获得一个ContentResolver对象传入相应的Uri,根据Uri访问操作指定数据即可。
在这里插入图片描述

四、ContentProvider的使用

1、自定义ContentProvider
2、使用系统提供的ContentProvider

五、自定义ContentProvider

1、自定义ContentProvider实现过程

①、通过SQLiteOpenHelper类创建一个SQL数据库
②、自定义ContentProvider类,并实现里面的方法(insert、delete等)
③、定义一个Uri类型的常量,为其指定一个唯一的字符串值,可供ContentResolver访问ContentProvider的标识符。
④、在清单文件AndroidManifest.xml中注册声明
<provider
	android:name=“cn.itcast.db.PersonDBProvider”
	android:authorities=“cn.itcast.db.personprovider”
              android:exported="true">
</provider>
<!--属性依次为:全限定类名,用于匹配的URI,是否共享数据 --

2、ContentProvider类中的主要方法:

在这里插入图片描述

①、public boolean onCreate()

该方法在ContentProvider创建后就会被调用,其它应用程序第一次访问ContentProvider时,该ContentProvider会被创建出来,并立即回调该方法。

②、public Uri insert(Uri uri, ContentValues values)

根据该uri插入values对应的数据。

③、public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

该方法根据Uri查询select条件所匹配的全部记录。

projection:要查询的列名
selection:where子句的内容
selectionArgs: selection中占位符所对应的参数
sortOrder:排序
④、public int delete(Uri uri, String selection, String[] selectionArgs)

该方法根据Uri删除where条件匹配的所有记录。

⑤、public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)

该方法根据Uri修改where条件匹配的全部记录。

⑥、public String getType(Uri uri)

该方法用于返回当前Uri所代表数据的MIME类型。

插曲:MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。

假设一个provider有人员表,该provider的authority是cn.itcast.provider.personprovider。包含一个表:person。
例如:要得到Uri为content://cn.itcast.provider.personprovider/person指向表person,代表所有person记录,那么provider对应的MIME类型字符串应该为:“vnd.android.cursor.dir/person”。
例如:得到id为10的person记录,Uri为content://cn.itcast.provider.personprovider/person/10,那么返回的MIME类型字符串应该为:“vnd.android.cursor.item/person”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值