四大组件之ContentProvider

一、什么是ContentProvider

ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

二、ContentProvider如何使用呢?

1.ContentProvider
Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,当然前提是已获得适当的读取权限。
主要方法:
public boolean onCreate() 在创建ContentProvider时调用
public Cursor query(Uri, String[], String, String[], String) 用于查询指定UriContentProvider,返回一个Cursor
public Uri insert(Uri, ContentValues) 用于添加数据到指定UriContentProvider
public int update(Uri, ContentValues, String, String[]) 用于更新指定UriContentProvider中的数据
public int delete(Uri, String, String[]) 用于从指定UriContentProvider中删除数据
public String getType(Uri) 用于返回指定的Uri中的数据的MIME类型
*如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头。
例如:要得到所有person记录的Uricontent://contacts/person,那么返回的MIME类型字符串为"vnd.android.cursor.dir/person"
*如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头。
例如:要得到id10person记录的Uricontent://contacts/person/10,那么返回的MIME类型字符串应为"vnd.android.cursor.item/person"

2.ContentResolver
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。

ContentResolver提供的方法和ContentProvider提供的方法对应的有以下几个方法。
public Uri insert(Uri uri, ContentValues values) 用于添加数据到指定UriContentProvider中。
public int delete(Uri uri, String selection, String[] selectionArgs) 用于从指定UriContentProvider中删除数据。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)用于更新指定UriContentProvider中的数据。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)用于查询指定UriContentProvider

3.Uri
Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
第一部分是"content://"。可以看作是网址中的"http://"
第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作是网址中的主机名,比如"blog.csdn.net"
第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。


4.UriMatcherContentUristContentResolver简介
       因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcherContentUris。掌握它们的使用,会便于我们的开发工作。
       UriMatcher:用于匹配Uri,它的用法如下:
       1.首先把你需要匹配Uri路径全部给注册上,如下:
       //常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)
       UriMatcher  uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回匹配码为1

//添加需要匹配uri,如果匹配就会返回匹配码
       uriMatcher.addURI(com.changcheng.sqlite.provider.contactprovider,contact, 1);
//如果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使用insertdeleteupdatequery方法,来操作数据。

5.在AndroidManifest.xml配置

<provider android:name=".PersonContentProvider" 
android:authorities="com.wp.providers.personprovider"/>





 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值