Android 基础

Android 四大组件之 ContentProvider

2019-01-31  本文已影响3人  Kevin_小飞象

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

系统的 ContentProvider

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

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

自定义 ContentProvider

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

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

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

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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读