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

相关推荐
FG.3 分钟前
Day22
java·面试
apihz3 分钟前
域名WHOIS信息查询免费API使用指南
android·开发语言·数据库·网络协议·tcp/ip
菜鸟的迷茫5 分钟前
Redis 缓存雪崩、穿透、击穿面试题深度解析与 Spring Boot 实战代码示例
java
珹洺16 分钟前
C++算法竞赛篇:DevC++ 如何进行debug调试
java·c++·算法
问道飞鱼21 分钟前
【移动端知识】移动端多 WebView 互访方案:Android、iOS 与鸿蒙实现
android·ios·harmonyos·多webview互访
SHUIPING_YANG24 分钟前
根据用户id自动切换表查询
java·服务器·数据库
爱吃烤鸡翅的酸菜鱼36 分钟前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
惊涛骇浪、42 分钟前
SpringMVC + Tomcat10
java·tomcat·springmvc
墨染点香1 小时前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
aningxiaoxixi1 小时前
Android 之 audiotrack
android