不同于SQLiteDatabase,ContentResolver中的增删改查方法都是不接收表名参数的,而是使用一个Uri参数代替,这个参数被称为内容URI。
内容URI
内容URI给内容提供器中的数据建立了唯一标识符。它主要由两部分组成,权限(authority)和路径(path)。权限是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。比如某个程序的包名是com.example.app
,那么该程序对应的权限就可以命名为com.example.app.provider
。路径则是用于对同一应用程序中不同的表做区分的,通常都会添加到权限的后面。比如某个程序的数据库里存在两张表,table1和table2,这时就可以将路径分别命名为/table1和/table2。还需要在字符串的头部加上协议声明。
内容URI最标准的格式写法如下:
content://com.example.app.provider/table1
content://com.example.app.provider/table2
内容URI的格式
以路径结尾表示期望访问该表中所有的数据。
content://com.example.app.provider/table1
以id结尾就表示期望访问该表中拥有相应id的数据。
content://com.example.app.provider/table1/1
使用通配符
可以使用通配符的方式来分别匹配这两种格式的内容URI,规则如下:
1. *:表示匹配任意长度的任意字符
2. #:表示匹配任意长度的数字
所以,一个能够匹配任意表的内容URI格式就可以写成:
content://com.example.app.provider/*
而一个能够匹配table1表中任意一行数据的内容URI格式就可以写成:
content://com.example.app.provider/table1/#
解析成Uri对象
Uri uri = Uri.parse("content://com.example.app.provider/table1")
调用Uri.parse()方法将内容URI字符串解析成Uri对象。