打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android四大组件之三(Content Provider)

* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen

1、Content Provider(内容提供者)简介
从字面上的意思来看,Content Providers是内容提供者,也就是数据的提供者,而数据的来源可以是SQLite数据库或者File存储等等方式。为了实现各个应用程序之间的数据共享,可以把应用程序的私有数据封装成ContentProviders,接着定义一个URI,向外提供统一的数据接口。其他的应用程序可以通过这个URI来访问指定的数据,然后实现各种操作,如添加(insert)、删除 (delete)、查询(query)、修改(update)。而不用去操作应用程序的底层私有数据。一般来说底层的私有数据是基于SQLite建立的。
和其他app共享数据的大体过程:
为方便其它app与用户的应用程序的ContentProvider通信,通常要自定义一个公共的Uri:CONTENT_URI,其它app通过这一Uri,与ContentProvider交流。需要注意的是,当用户自己建立好ContentProvider之后,并不直接与之打交道,而是通过ContentResolver进行操作。
2、Content Provider的使用
2.1、利用ContentResolver方法管理content Provider
Android提供了ContentResolver(内容分解器),外界的程序可以通过ContentResolver的方法来管理ContentProvider提供的数据。
简单来说,Resolver就是分解、管理 Provider的数据内容。在理解Resolver之前,应该知道URI。事实上可以这样理解,URI就是一个地址,对应着Content Provider的数据内容(关于URI的更详细部分,可参看文章最后)。
ContentResolver是通过URI来查询ContentProvider,ContentResolver采用的是类似数据库的操作(SQLite)来从Content providers中获取数据。
ContentResolver的主要接口方法,如下:(来自android 官方文档)
返回值函数声明
final Uriinsert(Uri url, ContentValues values)Inserts a row into a table at the given URL.
final intdelete(Uri url, String where, String[] selectionArgs)Deletes row(s) specified by a content URI.
final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)Query the given URI, returning a Cursor over the result set.
final intupdate(Uri uri, ContentValues values, String where, String[] selectionArgs)Update row(s) in a content URI.
要获取ContentResolver的话,可以调用getContentResolver ()方法,
a、例如下面演示query(查询)方法:
由上表可知query方法返回值为Cursor,代码如下
[java]
获得cursor (游标)(也可以用.managedQuery()方法来获取cursor,两者参数一样,区别是第二种方法可以管理Cursor的生命周期。
如Cursor cr = managedQuery(myPerson, null, null, null, null);)
那为什么要获取Cursor呢?因为通过query(查询)而得到的数据,要通过Cursor的方法来读取。(只是读取而已)
b、其他方法(注意返回值)
同样地,比如把android改名为apple。可调用ContenResolver.update()方法。
删除单个记录,调用ContentResolver.delete()方法,在参数中,指定到具体行即可。
如果是删除多个记录,调用ContentResolver.delete()方法,URI参数指定Content Provider即可,并带一个类似SQL的WHERE子句条件。
2.2、如何把一个应用程序的数据共享出去。
a、创建自己的Content provider(需要继承ContentProvider类)
b、如果这个应用程序的数据和已存在的Content provider数据结构是一致的,在获得该Content provider的“写”权限之后,
把数据写到已存在的Content provider中。
/********************************************附录**********************************/
1、URI的简介
通用资源标志符(Universal Resource Identifier, 简称"URI")。
Android上可用的每种资源 - 如图像、视频、通讯录、短信等等都可以用URI来表示。
URI也包括URL和和URN(为了便于理解,下面对比两者)
其中URL很容易理解,就是平常所说的网页地址。
众所周知,URL不仅可以标识特定网站,也可以标识这个网站某个特定网页。
同样地,URI不仅可以标识特定Content Provider,还可以标识这个应用程序的Content Provider中特定的数据库表。
这两者是类似的
关于三者更详细的对比,可参考此文章
http://www.eoeandroid.com/thread-526-1-1.html
2、URI的组成部分
一个完整的URI一般由4部分组成:
将其分为A,B,C,D
[java]
A:通用前缀"content://",用来说明一个Content Provider控制这些数据。
B:URI 的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。
这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称 。
C:数据库中表的名字(如通讯录)
D:如果URI中包含表示需要获取的记录的ID;则就返回该ID对应的数据,如果没有ID,就表示返回全部;(如读取通讯录时,有ID表示某个联系人,没有ID表示整个通讯录)
Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher和ContentUris。
UriMatcher
UriMatcher 类主要用于匹配Uri.
ContentUris
ContentUris 类用于获取Uri路径后面的ID部分
延伸阅读:上一篇|下一篇

博客专栏
大钟的Android_NDK开发
文章:5篇
阅读:51724
Android学习笔记
文章:24篇
阅读:163757
文章分类
android编译 (8)
Android学习笔记 (24)
JAVA学习 (1)
C与C++ (2)
Linux相关 (4)
Android相关 (8)
瑞芯微RK (3)
嵌入式相关 (1)
计算机相关 (2)
Android多媒体&流媒体开发 (6)
Android的NDK开发 (5)
所想所感 (1)
文章存档
2014年04月 (2)
2012年08月 (6)
2012年07月 (4)
2012年06月 (1)
2012年05月 (3)
展开
阅读排行
【整理】Android-Recovery Mode(recover模式详解) (28454)
Android学习笔记(21)————利用JDBC连接服务器数据库 (24609)
Android的NDK开发(1)————Android JNI简介与调用流程 (16944)
RKAndroidTool工具的各项image详解(RK2918版本) (15712)
Android学习笔记(13)————利用SharedPreferences来保存应用程序的数据 (12391)
Android学习笔记(12)————利用SQLiteOpenHelper来管理SQLite数据库 (11473)
Android多媒体开发(5)————利用Android AudioTrack播放mp3文件 (11141)
Android的文件系统结构 (10904)
Android的NDK开发(3)————JNI数据类型的详解 (10423)
Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2 (10328)
评论排行
Android学习笔记(21)————利用JDBC连接服务器数据库 (65)
关于havlenapetr-FFMpeg在Android 4.0(ICS)的补充说明 (63)
Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2 (49)
Android多媒体开发(4)————移植Libmad到android平台 (41)
Android多媒体开发(5)————利用Android AudioTrack播放mp3文件 (29)
Android多媒体开发(2)————使用Android NKD编译原版FFmpeg (11)
Android学习笔记(12)————利用SQLiteOpenHelper来管理SQLite数据库 (11)
Android学习笔记(20)————利用ListView制作带竖线的多彩表格 (10)
Android的NDK开发(2)————利用Android NDK编写一个简单的HelloWorld (8)
Android学习笔记(1)————Android四大组件之一(Activity) (8)
推荐文章
* python3自动爬笑话
* Nagios服务器端安装部署详解(1)
* Android-自定义PopupWindow
* Linux 高性能服务器编程——高级I/O函数
* 实例介绍Cocos2d-x精灵菜单和图片菜单
* Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
最新评论
Android上获取优酷(youku),土豆(tudou),乐视(letv),爱奇艺(iqiyi)等HTML5页面上的视频真正地址
ccl9110 : 这个方法只能获取到第一段视频的地址,如果视频分成好几段该怎么获取呢
Android多媒体开发(5)————利用Android AudioTrack播放mp3文件
yg33717 : @u013380383:自己用NDK编译的,你可以自己去下mad.c的源码再通过NDK编译,博主前面...
Android多媒体开发(5)————利用Android AudioTrack播放mp3文件
不知道你妈的 : libmad.so那个文件哪里下载的?
Android多媒体开发(5)————利用Android AudioTrack播放mp3文件
不知道你妈的 : @knight_ysq:问题解决了没?
Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
conowen : 这个不能编译的,编译jni代码还行,源代码必须要在linux下面编译
Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
huixinhappy : 您好,我想问一下Windows下用Cygwin能编译Android源代码,如果能编辑怎么编译呀?
Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
zhaoshaolei123 : 您好!看到您的博客很兴奋!因为写的太好了!我是按着你博客的思路进行实践的,但是在编译过程中遇到了一点...
编译Android时,添加或者删除system.img中第三方apk、更改Android系统默认语言
行者历程 : 关于添加第三方应用到system.img 如果第三方app存在有lib so库的话 你如何解决 不要...
Android学习笔记(21)————利用JDBC连接服务器数据库
caiwenfeng_for_23 : 真机下可以吗?android4.2可以加载驱动,但是连不上。
Android学习笔记(12)————利用SQLiteOpenHelper来管理SQLite数据库
stoovy : 为什么我做插入的时候提示没有找到数据表呢?求教
主题推荐
android第三方应用数据结构数据库通讯录
博文推荐
网易研发工程师(移动端游戏)—暑期实习生... spring事务心得积累
关于传递参数时值变化的问题 关于Android NDK中调用第三方的...
IIS管理器里添加虚拟目录,提示: “/... Android Recovery的汉化 ...
计算中缀表达式的值 黑马程序员_泛型简介
查看评论
暂无评论
您还没有登录请
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
【社区之星】孔德芳:如何才能提高Java Web性能? 4月推荐博文汇总 专访朱燚:弃移动和互联网应用战场转战传统应用的弄潮儿
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
总结篇之六:ContentProvider之读写联系人
【转帖】Android 应用程序之间数据共享—ContentResolver - - Ja...
总结Content Provider的使用
android之ContentResolver与ContentProvider
Android开发之内容提供者-创建自己的ContentProvider(详解)
Android Cursor自动更新的实现和原理 · KOHOH的技术博客
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服