网上对于ContentProvider基本使用的文章很多,但是对ContentProvider里面的知识点介绍的很少,这里总结一下自己了解到的。
接下来我会介绍:
1、内容URI是什么?
2、ContentProvider的两个抽象方法onCreate()和getType()
3、内容URI所对应的MIME类型标准写法。
4、内容URI中的通配符。
5、UriMatcher的常用方式。
1、内容URI是什么:
给内容提供器中的数据建立了唯一标识符,它主要有两部分组成:authority和path。 authority是用于区分不同的应用程序,一般为包名;path用于区别一个应用程序中的不同”数据表”; 例如:包名是:com.hbbfxy 程序中有两张”数据表” table1和table2,则完整的内容URL就是
content://com.hbbfxy/table1
content://com.hbbfxy/table2
2、ContentProvider的两个抽象方法onCreate()和getType(uri)
onCreate():初始化内容提供器的时候调用;只有当存在ContentResolver尝试访问我们程序中的数据时,内容提供器才会被初始化。
String getType(uri):根据传入的内容URL来返回相应的MIME类型。
3、内容URI所对应的MIME类型标准写法。
public String getType(Uri uri){
switch (msUM.match(uri)){
case TABLE1_ALL:
return "vnd.android.cursor.dir/vnd.com.hbbfxy.table1";
case TABLE1_ITEM:
return "vnd.android.cursor.item/vnd.com.hbbfxy.table1";
case TABLE2_ALL:
return "vnd.android.cursor.dir/vnd.com.hbbfxy.table2";
case TABLE2_ITEM:
return "vnd.android.cursor.item/vnd.com.hbbfxy.table2";
}
}
表中所有数据的内容URI所对应的MIME类型:vnd.android.cursor.dir/vnd.<authority>.<path>
表中指定数据的内容URI所对应的MIME类型:vnd.android.cursor.item/vnd.<authority>.<path>
4、内容URI中的通配符。
我们可以使用通配符的方式来分别匹配两种格式的内容URI
*:表示匹配任意长度的任意字符;
#:表示匹配任意长度的数字。
一个能匹配任意表的内容URI格式就可以写成:
content://com.hbbfxy/*;
一个能匹配table1表中任意一行数据的内容URI格式就可以写成:
content://com.hbbfxy/table1/#;
5、UriMatcher的常用方式。
private static final int TABLE1_ALL = 0;
private static final int TABLE1_ITEM = 1;
private static final int TABLE2_ALL = 2;
private static final int TABLE2_ITEM = 3;
private static UriMatcher msUM = new UriMatcher(UriMatcher.NO_MATCH);
static{
msUM.addURI(PACKAGE_NAME, "table1", TABLE1_ALL);
msUM.addURI(PACKAGE_NAME, "table1/#", TABLE1_ITEM);
msUM.addURI(PACKAGE_NAME, "table2", TABLE1_ALL);
msUM.addURI(PACKAGE_NAME, "table2/#", TABLE1_ITEM);
}
switch (msUM.match(uri)){
case TABLE1_ALL:
break;
case TABLE1_ITEM:
break;
case TABLE2_ALL:
break;
case TABLE2_ITEM:
break;
}