【转】Pro Android学习笔记(六):了解Content Provider(中)
Content Provider的架构
Authority类似web中的域名,每个content provider会通过AndroidManifest.xml向系统注册authority,如下。其中name是类名,即如何找寻这个content provider。可以省去AndroidManifest.xml中package name,不需要写完整的类名。如android:name=".BookProvider"。
<provider android:name="SomeProvider" android:authorities="com.your-company.SomeProvider" />
<provider android:name="NotePadProvider" android:authorities="com.google.provider.NotePad" />
和web的URL域名类似,content provider进行数据访问的URL为content://authority/......,例如content://com.your-company.SomeProvider/。对于Android自己提供的content provider,有时会写的比较简单,例如用contacts来代替com.google.android.contacts,如content://contacts/……。
有时注册的provider会比较复杂,例如Android的联系人信息,其uri为content://com.android.contacts/contacts,其源代码信息为如下,该provider需要读写权限。
<provider android:name="ContactsProvider2"
android:authorities="contacts;com.android.contacts"
android:label="@string/provider_label"
android:multiprocess="false"
android:readPermission="android.permission.READ_CONTACTS"
android:writePermission="android.permission.WRITE_CONTACTS">
<path-permission
android:pathPrefix="/search_suggest_query"
android:readPermission="android.permission.GLOBAL_SEARCH"/>
<path-permission
android:pathPrefix="/search_suggest_shortcut"
android:readPermission="android.permission.GLOBAL_SEARCH"/>
<path-permission
android:pathPattern="/contacts/.*/photo"
android:readPermission="android.permission.GLOBAL_SEARCH"/>
<grant-uri-permission android:pathPattern=".*" />
</provider>
Content URI的结构。Android通过Content URI来获取数据,并返回具有行列结构的游标cursor。content UI的格式为:
content://<authority-name>/<path-segment1>/<path-segment2>/etc…
例子:content://com.google.provider.NotePad/notes/23
例子的/notes表示collection,或理解为一个目录,称为path segment,而/23表示特定的item,是具体的index,content provider提供的是二维数据,这就是该row的_id值。
MIME Type。HTTP响应会带有MIME Type,最长江就是text/html,告知body的数据类型。Content Provider也一样,可以用方法获得MIME。MIME由两部分组成:type/subtype,具体可以参考rfc2046。type和subtype的定义可以在IANA中查到。下面是MIME的几个例子:
text/xml
application/rtf
application/vnd.ms-excel //vnd是vendeor-specific,厂家自定义格式,如此处的微软excel格式
application/x-tar //x-表示自定义的私有格式
在Content Provider中可以存在多层目录,即存在item和collection,相应地分别有item的MIME tye和collection的MIME type。Android采用namespace的方式定义type和subtype。如下:
vnd.android.cursor.item/vnd.<yourcompanyname.contenttype> 是item的MIME type
vnd.android.cursor.dir/vnd.<yourcompanyname.contenttype>是collection的MIME type
从上面的格式可以看到,type已指定,开发者只能对subtype进行设置。
定义清晰描述。我们应该为所创建的content provider提供清晰的定义或描述,可通过所使用的Uri进行constant的预定义。例如MediaStore.Images.Media.INTERNETAL_CONTENT_URI表示content://media/internal/images。同时我们也应为个列
小例子:读取联系人信息。Provider通过uri去访问,返回游标(cursor),我们将通过下面的小例子进行验证,先进行Uri的了解,然后对cursor进行二次轮询,一次采用while,一次采用for方式。正如前面的contact provider在xml的定义所示,有读写权限限制,因此在XML中应赋予相应的权限:<uses-permission android:name="android.permission.READ_CONTACTS" />
|
private void contentProviderTest(){ /* 下面是一些uri的操作,作为测试,通过provider的Uri都会提供constant的方式 */ |
Where条件的用法。查找特定的数据,可以利用Uri,也可以利用manageQuery()方法的参数。例如希望查询select * from notes where _id=23,利用Uri,可以设置为
String noteUri = “content://com.google.progider.NotePad/notes/23”;
利用manageQuery( )中的selection擦数,同样可以表达为
managedQuery(uri, //为"content://com.google.provider.NotePad/notes"
null,
"_id=?" ,
new String[] {23} ,
null);
增加、修改、删除数据。增删改查是数据读写的四大功能,我们将在后面的小例子中给出详细的说明。
相关链接: 我的Android开发相关文章
转自http://blog.csdn.net/flowingflying/article/details/9217431
【转】Pro Android学习笔记(六):了解Content Provider(中)的更多相关文章
- 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart
目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(六八):HTTP服务(2):HTTP POST
目录(?)[-] 找一个测试网站 HTTP POST小例子 上次学习了HTTP GET请求,这次学习一下HTTP POST. 找一个测试网站 小例子好写,但要找个测试网站就有些麻烦,一下子无从入手,都 ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager
目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
随机推荐
- cacti 安装和组件添加
安装cacti 步骤 1.准备lamp环境 2.准备所需包:rrdtool(绘图) cacti(安装程序) net-snmpd(数据收集) 3.安装所需库文件 rrdtool所需库文件有: cairo ...
- ES通过API调整设置
1.查询es的设置信息 2.查询单个索引的设置 3.设置复制集为0
- JAVA中int与String类型的相互转换
Java的int和String类型间互相转换,小功能但是经常用到,下面是几种实现的方法: 字符串类型String转换成整数int 1. int i = Integer.parseInt([String ...
- ABAP 调用webservice 错误
错误:1.soamanager 配置端口错误: 调整端口后报错: java端回复: 嗯 有问题了我待会儿看看应该是数据有问题
- SD 相关表
一.客户主数据基本数据放在KNA1里:公司代码放在KNB1里:销售视图放在KNVV里:合作伙伴放在KNVP里: 二.信用主数据KNKK里有信贷限额.应收总额.特别往来:S066里是未清订单值:S067 ...
- A Pangram
Codeforces Round #295 div2 的A题,题意是判读一个字符串是不是全字母句,也就是这个字符串是否包含了26个字母,无论大小写. Sample test(s) input 12 t ...
- callback机制之内核通知链表【转】
本文转载自:http://bbs.chinaunix.net/thread-2011776-1-1.html 1.通知链表简介 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生 ...
- SQL语句编写注意问题
下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍.在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描 ...
- Centos7 安装lnmp
Centos7 安装lnmp 1.下载 wget http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz 2.解压 tar -zvxf lnmp1.5-full. ...
- Linus Torvalds: 成功的项目源于99%的汗水与1%的创新
2017年2月15日,在加利福尼亚州的开源领袖峰会上,由Linux基金会执行董事Jim Zemlin进行的一次采访中,Torvalds讨论了他如何管理Linux内核的开发以及他对工作的态度. Linu ...
