移动应用开发-第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()方法中进行。

相关推荐
Memory_荒年9 小时前
Spring Security + OAuth2 + JWT:三剑客合璧,打造“无懈可击”的微服务安全防线
java·后端·spring
杰克尼10 小时前
知识点总结--02(java基础部分)
java·开发语言·jvm
mldlds10 小时前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot
xxjj998a10 小时前
Spring Boot 整合 Apollo 配置中心实战
java·spring boot·后端
武超杰11 小时前
Spring 纯注解配置全解析(进阶版)
java·开发语言
恋猫de小郭11 小时前
React Native 鸿蒙 2026 路线发布,为什么它的适配成本那么高?
android·前端·react native
AC赳赳老秦11 小时前
OpenClaw关键词挖掘Agent配置(附SOP脚本,可直接复制使用)
java·大数据·开发语言·人工智能·python·pygame·openclaw
茶本无香11 小时前
JDK 21 ZGC分代功能详解:配置、原理及生产环境实践
java·jvm
xxjj998a11 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
wellc11 小时前
Spring Boot 热部署
java·spring boot·后端