码迷,mamicode.com
首页 > 移动开发 > 详细

Android 四大组件学习之ContentProvider一

时间:2015-07-23 15:41:05      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:contentprovider以及url

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的知识就说到这里


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 四大组件学习之ContentProvider一

标签:contentprovider以及url

原文地址:http://blog.csdn.net/longwang155069/article/details/47021213

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!