当我们想要访问某个网址时,我们要在浏览器输入如下地址:
http://www.crazyit.org/ethos.php
上面那个地址可以分为如下三个部分:
http://
这是URL的协议部分,只要通过HTTP://协议来访问网站,这个部分就是固定的
www.crazyit.org
这是域名部分,只要访问指定网站,这部分也是固定的
ethos.php
网站资源部分,当访问者需要访问不同资源的时候,这部分是动态改变的
ContentProvider要求的Uri与此类似,例如如下Uri:
content://org.crazyit.providers.dictprovider/words
它也可以分为如下三个部分:
content://
这部分是Android的ContentProvider规定的,就像上网的协议默认是http://
一样,暴露ContentProvider、访问ContentProvider的协议默认是content://
org.crazyit.providers.dictprovider
这个部分就是ContentProvider的authorities,系统就是由这个部分来找到操作哪个ContentProvider的,只要访问指定的ContentProvider,这个部分就是固定的
words
这个部分是资源部分,当访问者需要访问不同数据时,这个部分是动态改变的
需要指出的是,Android的Uri所能表达的功能更丰富,它还支持如下的Uri:
content://org.crazyit.providers.dictprovider/words/2
此时它要访问的资源为man/2,这就意味着访问man数据中id为2的记录
还有如下形式:
content://org.crazyit.providers.dictprovider/words/2/words
此时它要访问的资源为man/2/man,这意味着访问man数据中ID为2的记录的man字段。
如果要访问全部数据,即可使用下面所示的形式:
content://org.crazyit.providers.dictprovider/words
虽然大部分使用ContentProvider所操作的数据都来自于数据库,但有时这些数据也可来自于文件、XML或者网络等其他存储方式,此时支持的Uri也可以改为如下形式:
content://org.crazyit.providers.dictprovider/words/detail/
上面的Uri表示操作word节点下的detail节点
为了将一个字符串转换成Uri,Uri工具类提供了parse()静态方法,例如下面代码即可将字符串转换为Uri:
Uri uri = Uri.parse("content://org.crazyit.providers.dictprovider/words/2");