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

相关推荐
资生算法程序员_畅想家_剑魔18 小时前
Java常见技术分享-12-多线程安全-锁机制
java·开发语言
00后程序员张18 小时前
python 抓包在实际项目中的合理位置,结合代理抓包、设备侧抓包与数据流分析
android·ios·小程序·https·uni-app·iphone·webview
一叶飘零_sweeeet18 小时前
吃透 Spring 体系结构
java·spring
2401_8370885018 小时前
简要总结 HashSet 和 HashMap(Java)
java·开发语言
毕设源码-钟学长19 小时前
【开题答辩全过程】以 基于Java的家政服务管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
灵感菇_19 小时前
Android Service全面解析
android·service·四大组件
小白学大数据19 小时前
Java 爬虫对百科词条分类信息的抓取与处理
java·开发语言·爬虫
alexhilton19 小时前
Jetpack ViewModel内幕:内部机制与跨平台设计
android·kotlin·android jetpack
Coder_Boy_20 小时前
Spring 核心思想与企业级最佳特性(实践级)事务相关
java·数据库·spring
历程里程碑20 小时前
hot 206
java·开发语言·数据结构·c++·python·算法·排序算法