ContentProvider

components

Posted by Cc1over on July 10, 2018

ContentProvider的基本用法

ContentProvider的使用步骤

1)创建数据库、表,因为内容提供者主要是把私有数据库数据提供给外部访问。
2)写一个类继承ContentProvider类,并重写其中的onCreate()、query()、insert()、update()、delete()、getType()等方法。
3)确定主机名(authority),添加路径匹配规则,此处会利使用到UriMatcher类。
4)在 AndroidMainifest.xml中声明内容提供者,并添加关键属性android:authorities。
5)编写内容提供者的onCreate()、query()、insert()、update()、delete()、getType()等方法。

关于getType()方法以及MIMEType:

根据给定的 URI 来实现处理 MIME类型的请求, 对于单条记录返回的 MIME 类型是以 vnd.android.cursor.item 开始的, 对于多条记录返回的MIME类型是以vnd.android.cursor.dir/ 开始的 这个方法可以在多线程环境下被调用。

 @Override  
    public String getType(Uri uri) {  
        int flag = URI_MATCHER.match(uri);  
        switch (flag) {  
            case STUDENT:  
                return "vnd.android.cursor.item";  
            case STUDENTS:  
                return "vnd.android.cursor.dir/";  
        }  
        return null;  
    }  

UriMatch

UriMatcher 类的概要描述
1)这是一个在 content provider 中帮助匹配 URIs 的实用类。
2)public void addURI (String authority, String path, int code)这个方法是用来表示在 content provider 里面添加外部对其的匹配的规则,当 URI 被匹配的时 候,就会返回 code 码, URI节点可以精确的匹配字符串, “” 号匹配任何的字符串 “#” 号只能匹配数字。[比如删除一条记录中 ID 往往是数字]
参数说明:
1)authority : 授权, 就是 AndroidMainifest.xml 中的授权
2)path : 匹配路径(通常是一个表名)[
可以作为匹配任意字符的通配符, # 可以作为匹配数字的通配符]。【注意这里如果是单条记录,需要添加 /# 标示符】

 private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);  
    private static final int STUDENT = 1; // 操作单条记录  
    private static final int STUDENTS = 2; // 操作多条记录  
    // 添加对外部的匹配规则  
    static {  
        URI_MATCHER.addURI("com.android.contentproviderdemo.StudentProvider",  
                "student", STUDENTS);  
        URI_MATCHER.addURI("com.android.contentproviderdemo.StudentProvider",  
                "student/#", STUDENT);  
    }