Android初级基础知识复习(八) —— 内容提供与处理

内容提供与处理

  Android号称提供了4大组件,分别是页面Activity、广播Broadcast、服务Service和内容提供器 ContentProvider。其中内容提供器是跟数据存取有关的组件,完整的内容组件由内容提供器 ContentProvider、内容解析器ContentResolver、内容观察器ContentObserver这三部分组成。
 ContentProvider为App存取内部数据提供统一的外部接口,让不同的应用之间得以共享数据。像我们熟知的SQLite操作的是应用自身的内部数据库;文件的上传和下载操作的是后端服务器的文件;而 ContentProvider操作的是本设备其他应用的内部数据,是一种中间层次的数据存储形式。

在实际编码中,ContentProvider只是一个服务端的数据存取接口,开发者需要在其基础上实现一个具体 类,并重写以下相关数据库管理方法

  1. onCreate:创建数据库并获得数据库连接。
  2. query:查询数据。
  3. insert:插入数据。
  4. update:更新数据。
  5. delete:删除数据。
  6. getType:获取数据类型。

这些方法看起来是不是很像SQLite?没错,ContentProvider作为中间接口,本身并不直接保存数据,而是通过SQLiteOpenHelper与SQLiteDatabase间接操作底层的SQLite。所以要想使用ContentProvider,首先得 实现SQLite的数据表帮助类,然后由ContentProvider封装对外的接口。

内容解析器ContentResolver

前面提到了利用ContentProvider实现服务端App的数据封装,如果客户端App想访问对方的内部数据, 就要通过内容解析器ContentResolver访问。

内容解析器是客户端App操作服务端数据的工具,相对应的内容提供器是服务端的数据接口。要获取ContentResolver对象,在Activity代码中调用getContentResolver方法即可。

ContentResolver提供的方法与ContentProvider是一一对应的,比如query、insert、update、delete、 getType等方法,连方法的参数类型都一模一样。其中,最常用的是query函数,调用该函数返回一个游标 Cursor对象,这个游标与SQLite的游标是一样。

下面是query方法的具体参数说明(依顺序排列)。

  1. uri:Uri类型,可以理解为本次操作的数据表路径。
  2. projection:字符串数组类型,指定将要查询的字段名称列表。
  3. selection:字符串类型,指定查询条件。
  4. selectionArgs:字符串数组类型,指定查询条件中的参数取值列表。
  5. sortOrder:字符串类型,指定排序条件

在实际开发中,普通App很少会开放数据接口给其他应用访问,作为服务端接口的ContentProvider基本 用不到。内容组件能够派上用场的情况往往是App想要访问系统应用的通信数据,比如查看联系人、短信、 通话记录,以及对这些通信信息进行增、删、改、查。

内容观察器ContentObserver

ContentResolver获取数据采用的是主动查询方式,有查询就有数据,没查询就没数据。
有时我们不但要获取以往的数据,还要实时获取新增的数据,最常见的业务场景是短信验证码。电商App经常在用户注册或付款时发送验证码短信,为了给用户省事,App通常会监控手机刚收到的验证码数字,并自动填入验证码输入框。这时就用到了内容观察器ContentObserver,给目标内容注册一个观察器,目标内容的数据一旦发生变化,观察器规定好的动作马上触发,从而执行开发者预先定义的代码。

内容观察器的用法与内容提供器类似,也要从ContentObserver派生一个观察器类,然后通过 ContentResolver对象调用相应的方法注册或注销观察器。下面是ContentResolver与观察器有关的方法说明。

  1. registerContentObserver:注册内容观察器。
  2. unregisterContentObserver:注销内容观察器。
  3. notifyChange:通知内容观察器发生了数据变化。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值