黑马程序员安卓教程:内容观察者的原理

上传人:大米 文档编号:506408982 上传时间:2022-11-23 格式:DOCX 页数:3 大小:79.64KB
返回 下载 相关 举报
黑马程序员安卓教程:内容观察者的原理_第1页
第1页 / 共3页
黑马程序员安卓教程:内容观察者的原理_第2页
第2页 / 共3页
黑马程序员安卓教程:内容观察者的原理_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《黑马程序员安卓教程:内容观察者的原理》由会员分享,可在线阅读,更多相关《黑马程序员安卓教程:内容观察者的原理(3页珍藏版)》请在金锄头文库上搜索。

1、cp n 10 t吕 情阳悟 林旅下Hw.hh 淼 口阳 Qpnn品牌整壹中国IT玫育,茂们正在行动内容观察者的原理在Android项目中我们常常需要检测另一个应用私有数据的变化与否,如何检测另一个数据库应用中 的数据变化,我们通过下面的案例来讲述具体的操作。应用场景:有两个应用:一个是“01_数据库应用”,另一个是“07_内容观察者”;第二个应用监测第 一个应用数据库的变化,当第一个应用数据库发生变化便即时通知第二个应用。实现方法如下:1 .轮询若要监测数据库中数据的变化与否,我们可以在当前应用中编写一个定时器,该定时器的工作是每隔 一段时间查询数据库中的数据,将查询的结果与之前查询的数据库

2、记录进行对比从而实现监测的目的。这种方法虽然可行,但是效率低且内存消耗大,因此并不推举。Contentobserver内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当Contentobserver所观察的Uri发生变化时,便会触发 它。触发器分为表触发器、行触发器,相应地 ContentObserver也分为“表“ ContentObserver、行” ContentObserver,当然这是与它所监听的Uri MIME Type有关。这种方式效率高内存消耗少,在项目中应该使用这种方法。3.编写代码01_数据库

3、应用中定义了一个数据库person.db并注册了该数据库的内容提供者,下面我们通过内容观 察者来监听该数据库应用的变化,实现代码如下:新建另一个应用“07_内容观察者的原理”,在该应用的主Activity中编写例1-1代码:例1-1 注册内容观察者Overrideprotected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedlnstanceState); setContentView(R.layout.activity_main); /该uri路径指向数据库应用中的数据库info表Uri uri = Uri.p

4、arse(content:/com.itheima.db/info/);/注册内容观察者,参数uri指向要监测的数据库info表,参数true定义了监测的范围,最后一 个参数是一个内容观察者对象getContentResolver().registerContentObserver(uri, true, new MyObserver(new Handler();代码块中有一个参数 new MyObserver(new Handler(), MyObserver 是一个观察者对象,继承 Contentobserver 并实现了 onChange方法。具体代码如例1-2所示例 1-2 MyObse

5、rver.classprivate class MyObserver extends ContentObserverpublic MyObserver(Handler handler) /handler 是一个消息处理器。super(handler);Override/当info表中的数据发生变化时则执行该方法public void onChange(boolean selfChange) System.out.println(哈哈数据库的内容变化了 );super.onChange(selfChange);01_数据库应用中添加通知数据库变化的代码,具体代码如下:当新加一条数据记录时,此时数

6、据库info表会发生变化,因此我们需调整添加代码如例1-3所示:例1-3Overridepublic Uri insert(Uri uri, ContentValues values) int code = mUriMatcher.match(uri);if (code = SUCCESS) SQLiteDatabase db = helper.getWritableDatabase();long id = db.insert(info, null, values);db.close();/content:/com.itheima.db/info/5/大吼一声,讲数据库的内容变化了。 getC

7、ontext().getContentResolver().notifyChange(uri, null);return Uri.parse(content:/com.itheima.db/info/+id);elsethrow new IllegalArgumentException(uri 不匹配);当删除一条数据记录时,此时数据库info表会发生变化,因此我们需调整添加代码如例1-4所示:例1-4Overridepublic int delete(Uri uri, String selection, String selectionArgs) int code = mUriMatcher

8、.match(uri); if (code = SUCCESS) SQLiteDatabase db = helper.getWritableDatabase();int result = db.delete(info, selection, selectionArgs);I曾黯髦如改壹中国汀玫育,茂们正在行动db.close(); if(result0)( /大吼一声,讲数据库的内容变化了。 getContext().getContentResolver().notifyChange(uri, null); return result;else( throw new IllegalArgumentException(uri 不匹配);运行程序07_内容观察者,在02其他应用访问私有数据中新加一条数据,logcat打印出如图1-1所示 的信息:图1-1图1-1表明:在应用“07_内容观察者”监听到了数据库发生了变化。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号