美文网首页
Android四大组件之ContentProvider

Android四大组件之ContentProvider

作者: Android_Liu | 来源:发表于2017-05-19 17:36 被阅读21次

    1. 理解

    1). 为会么要有ContentProvider?

    a. 数据库文件只能当前应用访问, 别的应用不能直接访问

    b. 在真实的应用需求中, 可能需要应用操作其它应用的数据库表数据

    2). ContentProvider是什么?

    ContentProvider是四大应用组件之一

    当前应用使用ContentProvider将数据库表数据操作暴露给其它应用访问

    其它应用需要使用ContentResolver来调用ContentProvider的方法

    它们之间的调用是通过Uri来进行交流的

    2. 相关API:

    1). ContentProvider: 内容提供者类

    a. CRUD的方法: query(), insert(), update(), delete()

    b. onCreate()\

    a. CRUD的方法:

    query(),

    insert(),

    update(),

    delete()

    b. 实现观察的相关方法:

    registContentObserver()

    unRegistContentObserver()

    notityChanged()

    c.得到它的对象

    context.getCOntentResolver();

    3. ContentObserver: 内容观察者类

    void onChange(boolean selfChange) : 数据改变, 且执行了notityChanged()

    4). Uri: 包含一个具有一定格式的字符串所对应资源的类

    A : 是一个前缀,表示是由ContentProvider提供,固定不变

    B : authority, 标识是哪个Provider,不同的Provider此部分必须不同。

    C : 对应于哪张表 student

    D : id值, 对应表中的哪条记录

    5). UriMatcher: 用来识别uri的一个uri容器

    //添加一个合法的URI

    void addURI(String authority, String path, int code)

    //匹配指定的uri, 返回匹配码

    int match(Uri uri)

    6). ContentUris: 操作uri的工具类

    //解析uri, 得到其中的id

    long parseId(Uri contentUri)

    //添加id到指定的uri中

    Uri withAppendedId(Uri contentUri, long id)

    3. 自定义ContentProvider

    1).编写ContentProvider子类

    class StudentContentProvider extends ContentProvider {

    //实现inert、delete、update和query等方法

    }

    2). 在manifest.xml中注册

    android:name=".StudentContentProvider"

    android:authorities="com.atguigu.provider.studentprovider"

    android:exported="true"/>//标识是否允许其它应用访问,默认是false

    4. 使用ContentResolver访问ContentProvider

    1). 得到ContentResolver的对象

    2). 调用query(), delete(), update(), insert()方法调用ContentProvider对应的方法

    操作ContentResolver: 注册, 解注册, 通知

    相关文章

      网友评论

          本文标题:Android四大组件之ContentProvider

          本文链接:https://www.haomeiwen.com/subject/tsnyxxtx.html