您的位置:首页 > 移动开发 > Android开发

Android 四大组件学习之ContentProvider一

2015-07-23 14:55 381 查看
ContentProvider作为四大组件之一,那它存在一定是有原因的? 那为什么引用ContentProvider呢?  我们先看一个例子。

大家在生活中用手机,比如你按了360手机管家, 其中360手机管家就有一个短信,通话记录,联系人备份的功能。那手机里的短信,联系人都是存放在数据库中的



比如联系人的信息是存放在contacts2.db中。既然数据是存放在数据库中的,那360手机管家就必须拿到这个数据。但是contac2.db对别的用户是没有权限的。那360是如何拿到手机联系人这些信息呢?

这时候Android系统就引入了ContentProvider。既然第三方程序不能直接操作数据库里的数据,但是第三方可以通过ContentProvider提供的接口去操作数据。所以说ContentProvider的作用就是:就是在不同应用程序之间实现数据的共享。就比如说联系人程序,想把自己的数据共享给别人,但是又不能让别人直接操作,所以联系人程序就通过ContentProvider将自己的数据暴露出来。但是第三方程序想获得该数据,就得必须通过ContentResolver去获得该数据。

那既然访问数据必须通过ContentResolver去访问ContentProvider暴露出来的数据,那ContentResolver是如何知道数据在那里存放的呢?前提是ContentProvider得告诉数据在那里,你去那里取。 这时候及引入另一个人概念Url。

提起URL,大家可能第一想法就是互联网上的URL(统一资源定位符)。此URL是互联网上的URL,而在Android系统中url代表的也是一个地址。但是两者是有区别的:

比如就以百度主页的图片网址为例:



对比看看我们Android中的URL:



既然知道URL是干什么的,那接下来学习URL的一些常用的方法:

1: 将一个字符串转化为URL

Uri uri = Uri.parse("contengt://com.demo.contentprovider/user/1");

2:为url路径加上ID部分
Uri uri = Uri.parse("content://com.demo.contentprovider/user");
Uri resUri = ContentUris.withAppendedId(uri, 1);

/*生成后的uri为: content://com.demo.contentprovider/user/1 */

3:匹配此URl是否合法
/*构造方法的默认值是返回-1, 代表时不匹配返回-1*/
UriMatcher matcher = new UriMatcher(-1);

/*如果匹配为:content://com.demo.contentprovider/user, 就返回为1*/
matcher.addURI("com.demo.contentprovider", "user", 1);
/*如果匹配为:content://com.demo.contentprovider/user/2, 就返回为2*/
matcher.addURI("com.demo.contentprovider", "user/#", 2);//#代表通配符
今天关于ContentProvider以及URL的知识就说到这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息