URI

当我们想要访问某个网址时,我们要在浏览器输入如下地址:

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");
Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1