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

Android 四大组件之 ContentProvider

作者: Kevin_小飞象 | 来源:发表于2019-01-31 16:31 被阅读3次

    ContentProvider 主要的作用就是将程序的内部数据和外部进行共享,为数据提供外部访问接口,被访问的数据主要以数据库的形式存在,而且还可以选择共享哪一部分的数据。这样一来,对于程序当中的隐私数据可以不共享,从而更加安全。
    ContentProvider 是 Android 中一种跨程序共享数据的重要组件。

    系统的 ContentProvider

    系统的 ContentProvider 有很多,如通话记录、短信、通讯录等等,都需要和第三方的 App 进行共享数据。既然是使用系统的,那么 Contentprovider 的具体实现就不需要我们担心了,使用内容提供者的步骤如下:

    • 获取 ContentResolver 实例;
    • 确定 Uri 的内容,并解析为具体的 Uri 实例;
    • 通过 ContentResolver 实例来调用相应的方法,传递相应的参数,但是第一个参数总是 Uri,它制定了我们要操作的数据的具体地址。

    可以通过读取系统通讯录的联系人信息,显示在 Listview 中来实践这些知识。不要忘记在读取通讯录的时候,在清单文件中要加入相应的读取权限。

    自定义 ContentProvider

    系统的 Contentprovider 在与我们交互的时候,只接受了一个 Uri 的参数,然后根据我们的操作返回给我们结果。系统到底是如何根据一个 Uri 就能够提供给我们准确的结果呢?只有自己亲自实现一个看看了。

    和之前提到的一样,想重新自定义自己程序中的四大组件,就必须重新实现一个类,重写这个类中的抽象方法,在清单文件中注册,最后才能够正常使用。

    重新实现 ContentProvider 之后,发现我们重写了 6 个重要的抽象方法:

    • oncreate()
    • query()
    • update()
    • insert()
    • delete()
    • gettype()

    大部分的方法在数据库那里已经见过了,他们内部的逻辑可想而知都是对数据的增删改查操作,其中这些方法的第一个参数大多都是 Uri 实例。其中有两个方法比较特殊:

    • oncreate() 应该是内容提供者创建的时候所执行的一个回调方法,负责数据库的创建和更新操作。这个方法只有我们在程序中获取 ContentResolver 实例之后准备访问共享数据的时候,才会被执行。
    • gettype() 是获取我们通过参数传递进去的 Uri 的 MIME 类型,这个类型是什么,后面会有实例说明。

    内容提供者首先要做的一个事情就是将我们传递过来的 Uri 解析出来,确定其他程序到底想访问哪些数据。Uri 的形式一般有两种:

    1,以路径名为结尾,这种 Uri 请求的是整个表的数据.
    如: tabl1 标识
    我们要访问tabl1表中所有的数据
    2,以id列值结尾,这种Uri请求的是该表中和其提供的列值相等的单条数据。
    tabl1/1 标识
    我们要访问tabl1表中_id列值为1的数据。

    如果是内容提供器的设计者,那么我们肯定知道这个程序的数据库是什么样的,每一张表,或者每一张表中的 _id 都应该有一个唯一的内容 Uri 。我们可以将传递进来的 Uri 和我们存好的Uri进行匹配,匹配到了之后,就说明数据源已经找到,便可以进行相应的增删改查操作。

    Android:关于ContentProvider的知识都在这里了!

    相关文章

      网友评论

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

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