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的知识就说到这里
大家在生活中用手机,比如你按了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版本和API Level对应关系
- android webview js交互 第一节 (java和js交互)
- Android代码内存优化建议-OnTrimMemory优化
- android中获取 bitmap 像素的颜色 之吸管取色功能
- android获取View上某点的颜色
- Android客户端向服务器端发送数据的流程(1)
- Android ArrayAdapter 详解
- Android 如何修改PrograssBar的背景图片?
- Android
- 麦子学院android老师分享android实现listview异步加载图片的方法
- Android GridView中Item宽高不正常的问题解决
- Android Google购买PHP服务器端验证(订阅购买和一次性购买)
- android开发入门笔记:AIDL简单入门
- android postDelayed方法实现定时器
- Android碎片第一期
- 出现Error inflating class android.support.v7.widget.RecyclerView错误的解决办法
- android 命令获取手机中项目数据库
- Android 获取当前资源对象的屏幕信息
- android基础知识之AIDL简单入门
- android基础知识之AIDL简单入门