移动应用开发-第7章内容提供者与内容观察者

内容提供者ContentProvider实现跨程序共享数据的功能。

7.1内容提供者概述

若应用程序之间需要共享数据,则会用到ContentProvider内容提供者。功能是在不同程序之间实现数据共享,它不仅允许一个程序访问另一程序中的数据,同时还可以选择只对哪一部分数据进行共享,从而保证程序中的隐私数据不被泄露。

它是不同应用程序之间进行数据共享的标准API,如果想要访问ContentProvider中共享的数据,就一定要借助ContentResolver类,该类的实例需要通过Context中的getContent Resolver()方法获取。

程序需要使用ContentProvider暴露数据,才能被其他程序操作。其他程序必须通过ContentResolver操作该程序暴露出来的数据,而该程序会将操作结果返回给ContentResolver,然后ContentResolver再将操作结构返回给其他程序。

1,数据模型:ContentProvider使用基于数据库模型的简单表格来提供需要共享的数据。

如果要查询,则需要知道各个字段对应的数据类型。Cursor对象提供了getInt(),getString(),getLong()等方法。

2,Uri:ContentResolver中的增,删,改,查方法是以Uri的形式对外提供数据的。Uri为ContentProvider中的数据建立了唯一标识符。Uri主要由三部分组成,分别是scheme,anthority和path。scheme是以content://开头的前缀,表示操作的数据被ContentProvider控制,不会被修改。anthority表示为ContentProvider设置的唯一标识,它用来区分不同的应用程序,一般用程序包名方式命令以避免产生冲突。path表示资源或数据,当访问者需要操作不同的数据时,该部分可以动态修改。

7.2创建内容提供者

首先要创建一个类继承抽象类ContentProvider,接着重写该类中的onCreate(),getType(),insert(),delete(),update(),query()方法。其中onCreate是在创建内容提供者调用的。insert(),delete(),update(),query()方法分别用于根据指定Uri对数据进行增,删,改,查操作。getType()用于返回MIME类型的数据。

7.3访问其他应用程序

步骤:①通过pause()方法解析Uri。

②遍过query()方法查询数据。

projection:查询内容。

selection:查询条件。

selectionArgs:替换掉参数selection中的?。

③通过while()循环语句遍历查询到的数据。

可以调用Cursor对象的close()方法来关闭Cursor释放资源。

7.4内容观察者

使用内容观察者ContentObserver可以实时监听ContentProvider共享的数据是否发生变化。

7.4.1什么是内容观察者

它用于观察指定Uri代表的数据的变化,当ContentObserVer观察到指定Uri代表的数据发生变化时,就会触发ContentObserver的onChange()方法。此时onChange()方法中使用ContentResovler可以查询到变化的数据。

使用ContentObserver观察程序的数据时,首先要在该程序的ContentProvider中调用ContentResovler的notifyChange()方法。调用此方法后,当其他程序操作该程序中的数据时,该程序会向消息中心发送数据变化的消息,此时另一个程序会观察到消息中心的数据有变化,会触发ContentObserver的onChange()方法。

通过onChange观察步骤:

①创建内容观察者:MyObserver,重写父类构造方法与onChange()方法。

②注册内容观察者:先用getContentResovler()获取对象。再用registerContentObserver()方法来注册创建内容观察者。

③取消注册内容观察者:用unregisterContentObserver()方法取消注册,通常在onDestroy()方法中进行。

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值