ContentProvider你未必知道知识点!

网上对于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;
        }

猜你喜欢

转载自blog.csdn.net/look_Future/article/details/79718424