android 四大控件之ContentProvider

一、ContentProvider简介

在Android当中,每一个应用程序的数据都是采用私有的形式进行操作,不管这些数据是文件保存还是数据库保存,都不能被外部应用程序所访问。但是在很多情况下用户是需要可以在不同的应用程序之间进行数据的交换,所以为了解决这样的问题,在Android中专门提供了一个ContentProvider类,此类的主要功能是将不同的应用程序的数据操作标准统一起来,并且将各个应用程序的数据操作标准暴漏给其他应用程序,这样,一个应用程序的数据就可以按照ContentProvider所制定的标准被外部所操作。

ContentProvider类常用的方法:

二、Uri介绍

Uri代表了要操作的数据,Uri主要包含了两部分的信息:

(1)需要操作的ContentProvider

(2)对ContentProvider中的数据进行操作

一个Uri有以下几部分组成:

(3)scheme(协议),Android所规定为:content://。

(4)主机名,用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它,一般都为程序的"包.类"名称。

(5)路径:可以用来表示我们要操作的数据,一般有以下三种情况:

a、如访问person表中犬奴数据:.../person/

b、如访问person表中id为10的数据:.../person/10

c、如访问person表中id为10的name字段数据:.../person/10/name

Uri类常用的操作方法:

三、ContentResolver

Contentprovider在程序的操作中所提供的是一个操作的标准,所以用户如果要想依靠此标准进行数据操作的时候,必须使用到android.content.ContentResolver类完成,而这个类中所给出的操作方法与ContentProvider是一一对应,当用户调用了ContentResolver类的方法时实际上就相当于调用了ContentProvider类中的对应方法。

ContentResolver类常用的操作方法:

四、ContentUrils使用介绍(Uri的辅助操作类)

由于所有的数据都要通过Uri进行传递,Android中有提供了一个android.ContentUris的辅助工具类,ContentUris类用于操作Uri路径后面的ID部分,它有两个比较实用的方法:

(1)用于为路径加上ID部分withAppendedId(uri, id)

如: Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")

Uri resultUri = ContentUris.withAppendedId(uri, 10);

//生成后的Uri为:content://com.ljq.provider.personprovider/person/10

(2)用于从路径中获取ID部分parseId(uri)

如: Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person/10") long personid = ContentUris.parseId(uri); //获取的结果为:10

五、UriMatcher使用介绍(Uri的辅助操作类)

由于在使用ContentProvider类操作的时候某一个方法都可能传递多种Uri,例如:以query()方法为例,有可能表示查询全部,有可能表示按ID查询,所以必须对这些传递的Uri进行判断后才可能决定最终的操作形式。

UriMatcher类用于匹配Uri:

匹配方法为:

match(Uri.parse("路径"));

匹配步骤为:

1、实例化UriMatcher对象

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

UriMatcher  matcher = new UriMatcher(UriMatcher.NO_MATCH

2、注册需要匹配Uri路径。

//第三个参数为返回匹配码

matcher.addURI("com.ljq.provider.personprovider", "person/10", 1);//匹配成功则返回1

matcher.addURI("com.ljq.provider.personprovider", "person/#", 2);//#号为通配符,匹配成功则返回2

3、使用matcher.match(uri)方法对输入的Uri进行匹配。

如:matcher.match(Uri.parse("content://com.ljq.provider.personprovider/person/520")),则返回2

猜你喜欢

转载自blog.csdn.net/u011897782/article/details/82149973
今日推荐