第6章 内容提供者 教学设计.docx

上传人:b****5 文档编号:6872189 上传时间:2023-01-11 格式:DOCX 页数:12 大小:135.04KB
下载 相关 举报
第6章 内容提供者 教学设计.docx_第1页
第1页 / 共12页
第6章 内容提供者 教学设计.docx_第2页
第2页 / 共12页
第6章 内容提供者 教学设计.docx_第3页
第3页 / 共12页
第6章 内容提供者 教学设计.docx_第4页
第4页 / 共12页
第6章 内容提供者 教学设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

第6章 内容提供者 教学设计.docx

《第6章 内容提供者 教学设计.docx》由会员分享,可在线阅读,更多相关《第6章 内容提供者 教学设计.docx(12页珍藏版)》请在冰豆网上搜索。

第6章 内容提供者 教学设计.docx

第6章内容提供者教学设计

《移动应用开发技术》

教学设计

 

课程名称:

移动应用开发技术

授课年级:

授课学期:

教师姓名:

 

课题名称

第6章内容提供者

计划学时

6学时

内容分析

在Android开发中,经常需要访问其他应用程序的数据。

例如,使用支付宝转账时需要填写收款人的电话号码,此时就需要获取到系统联系人的信息。

为了实现这种跨程序共享数据的功能,Android系统提供了一个组件内容提供者(ContentProvider)。

本章将针对内容提供者进行详细地讲解。

教学目标

1、要求学生了解什么是内容提供者,并能创建内容提供者。

2、要求学生会对使用内容提供者对外暴露数据

3、要求学生会使用ContentResolver操作其他应用的数据

教学重点

内容提供者的使用、对数据进行增删改查、内容观察者的使用。

教学难点

内容提供者的使用、内容观察者的使用

教学方式

教师采用课堂讲授为主,使用教学PPT辅助授课。

第一学时

(内容提供者简介及创建、Uri简介)

一、情景导入

老师引导,通过数据库、SharedPreferences和文件都可以存储和访问数据,那么如果其他应用要写访问我们的应用中的数据应该怎么办呢?

然后引出内容提供者,内容提供者。

二、知识讲解

1、内容提供者简介(PPT7-8)

老师讲解,内容提供者是Android中的四大组件之一,用于保存和检索数据,是不同应用程序之间共享数据的接口。

ContentProvider是不同应用程序之间进行数据交换的标准API,以Uri的形式对外提供数据,允许其他应用操作本应用数据。

其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。

A应用需要使用ContentProvider暴露数据,才能被其他应用操作。

B应用必须通过ContentResolver操作A应用暴露出来的数据,而A应用会将操作结果返回给ContentResolver,然后ContentResolver再将操作结果返回给B应用。

2、创建内容提供者(PPT9)

在创建一个内容提供者时,首先需要定义一个类继承android.content包下的ContentProvider类。

ContentProvider类是一个抽象类,子类需要重写它的onCreate()、delete()、getType()、insert()、query()、update()这几个抽象方法。

publicclassPersonDBProviderextendsContentProvider{

publicbooleanonCreate(){

returnfalse;

}

publicCursorquery(Uriuri,String[]projection,Stringselection,

String[]selectionArgs,StringsortOrder){

returnnull;

}

publicStringgetType(Uriuri){

returnnull;

}

publicUriinsert(Uriuri,ContentValuesvalues){

returnnull;

}

publicintdelete(Uriuri,Stringselection,String[]selectionArgs){

return0;

}

publicintupdate(Uriuri,ContentValuesvalues,Stringselection,

String[]selectionArgs){

return0;

}

}

然后讲解这几个方法各自的作用。

•publicbooleanonCreate():

创建ContentProvider时调用

•publicintdelete(Uriuri,Stringselection,String[]selectionArgs):

根据传入Uri删除指定条件下的数据

•publicUriinsert(Uriuri,ContentValuesvalues):

根据传入的Uri插入数据

•publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder):

根据传入的Uri查询指定条件下的数据

•publicintupdate(Uriuri,ContentValuesvalues,Stringselection,String[]selectionArgs):

根据传入的Uri更新指定条件下的数据

•publicStringgetType(Uriuri):

用于返回指定Uri代表数据的MIME类型

创建完之后老师必须要强调一下,内容提供者是四大组件之一,必须要进行注册.

android:

name="cn.itcast.db.PersonDBProvider"

android:

authorities="cn.itcast.db.personprovider">

3、Uri简介(PPT10-11)

Uri代表了数据操作的方法,Uri是由scheme、authorites、path三部分组成。

scheme部分“content:

//”是一个标准的前缀,表明这个数据被内容提供者所控制,它不会被修改。

authorities部分“cn.itcast.db.personprovider”是在清单文件中指定的android:

authorities属性值,该值必须唯一,它表示了当前的内容提供者。

path部分“/person”代表资源(或者数据),当访问者需要操作不同数据时,这个部分是动态改变的。

Uri.parse(Stringstr)方法是将字符串转化成Uri对象的。

为了解析Uri对象,Android系统提供了一个辅助工具类UriMatcher用于匹配Uri。

•publicUriMatcher(intcode):

创建UriMatcher对象时调用,参数通常使用UriMatcher.NO_MATCH,表示路径不满足条件返回-1。

•publicvoidaddURI(Stringauthority,Stringpath,intcode):

添加一组匹配规则,authority即Uri的authoritites部分,path即Uri的path部分

•publicintmatch(Uriuri):

匹配Uri与addURI方法相对应,匹配成功则返回addURI方法中传入的参数code的值。

老师重点强调,这几个方法非常重要,要求学生必须要掌握。

三、知识巩固

1、总结知识点,使用博学谷系统中的随堂练习题巩固本节课所学知识。

2、使用博学谷系统中的测试题给学生布置作业。

第二学时

(案例——读取联系人信息)

一、知识回顾

1、对上节课留的作业进行答疑。

2、回顾总结上节课的内容,引出本节课主题

老师引导,上节课讲解了什么是内容提供者以及它的创建,并对内容提供者中几个方法的参数Uri进行讲解,接下来为了让初学者更好的使用内容提供者,接下来通过带大家编写一个读取联系人信息的案例。

二、知识讲解

1、案例——读取联系人信息(PPT12)

老师说明,“读取联系人信息”的案例来实现了查询自己暴露的数据,并将数据捆绑到ListView控件中的功能。

在讲解案例时要针对每一个步骤进行详细的分析,并说明能实现哪些效果。

三、知识巩固

1、总结知识点,使用博学谷系统中的随堂练习题巩固本节课所学知识。

2、使用博学谷系统中的测试题给学生布置作业。

第三学时

(访问内容提供者、案例——短信备份)

一、知识回顾

1、对上节课留的作业进行答疑。

2、回顾总结上节课的内容,引出本节课主题

老师引导,前两节课讲解了如何使用内容提供者暴露本应用的数据,接下来讲解如何通过另一个应用程序访问内容提供者所暴露的数据。

二、知识讲解

1、ContentResolver介绍(PPT13)

教师引导,在Android系统中,ContentResolver充当着一个中介的角色。

应用程序通过ContentProvider暴露自己的数据,通过ContentResolver对应用程序暴露的数据进行操作。

由于在使用ContentProvider暴露数据时提供了相应操作的Uri,因此在访问现有的ContentProvider时要指定相应的Uri,然后通过ContentResovler对象来实现数据的操作。

Uriuri=Uri.parse("content:

//cn.itcast.db.personprovider/person");

ContentResolverresolver=context.getContentResolver();

Cursorcursor=resolver.query(uri,newString[]{"address","date",

"type","body"},null,null,null);

while(cursor.moveToNext()){

Stringaddress=cursor.getString(0);

longdate=cursor.getLong

(1);

inttype=cursor.getInt

(2);

Stringbody=cursor.getString(3);

}

cursor.close();

上述代码用ContentResolver对象的query()方法实现了对其他应用数据的查询功能,需要注意的是,这里的Uri只能提供查询操作,如果使用查询操作的Uri进行更新操作会抛异常。

2、短信备份案例(PPT14)

老师引导,接下来通过“短信备份”案例学习使用ContentResolver查询内容提供者暴漏的数据。

然后根据教材一步步编写程序,实现效果如下:

三、知识巩固

1、总结知识点,使用博学谷系统中的随堂练习题巩固本节课所学知识。

2、使用博学谷系统中的测试题给学生布置作业。

第四学时

(内容观察者、案例——短信接收器)

一、知识回顾

1、对上节课留的作业进行答疑。

2、回顾总结上节课的内容,引出本节课主题

老师引导,前面已经学习过怎样用ContentProvider暴露数据,也学习了怎样用ContentResolver查询暴露的数据。

现在有一个问题,如果需要当ContentProvider暴露的数据发生改变时就使用ContentResolver查询该怎么做呢?

然后引出ContentObserver可以时时监控ContentProvider暴露的数据。

二、知识讲解

1、内容观察者介绍(PPT15)

内容观察者(ContentObserver)是用来观察指定Uri所代表的数据。

当ContentObserver观察到指定Uri代表的数据发生变化时,就会触发ContentObserver的onChange()方法。

此时在onChange()方法里使用ContentResovler可以查询到变化的数据。

上图表示,使用ContentObserver观察A应用的数据时,首先要在A应用的ContentProvider中调用ContentResolver的notifyChange()方法。

调用了这个方法之后当数据发生变化时,它就会向“消息中心”发送数据变化的消息。

然后C应用观察到“消息中心”有数据变化时,就会触发ContentObserver的onChange()方法。

2、常用方法(PPT16)

•publicvoidContentObserver(Handlerhandler):

ContentObserver的派生类都需要调用该构造方法。

参数可以是主线程Handler(可以更新UI),也可以是任何Handler对象。

•publicvoidonChange(booleanselfChange):

当观察到的Uri代表的数据发生变化时,会触发该方法。

老师引导,ContentProvider通过delete()、insert()、update()会使数据发生变化,因此使用ContentObserver同样需要观察这三个方法,并且需要在ContentProvider的这三个方法中调用ContentResolver的notifyChange()方法,如下代码:

publicUriinsert(Uriuri,ContentValuesvalues){

if(matcher.match(uri)==INSERT){//匹配Uri路径

SQLiteDatabasedb=helper.getWritableDatabase();

db.insert("person",null,values);

getContext().getContentResolver().

notifyChange(PersonDao.messageuri,null);

}else{//匹配失败

thrownewIllegalArgumentException("路径不匹配,不能执行插入操作");

}

returnnull;

}

接下来实现在应用中注册观察者,并监听数据变化的功能:

publicclassMainActivityextendsActivity{

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ContentResolverresolver=getContentResolver();

Uriuri=Uri.parse("content:

//aaa.bbb.ccc");

resolver.registerContentObserver(

uri,true,newMyObserver(newHandler()));

}

privateclassMyObserverextendsContentObserver{

publicMyObserver(Handlerhandler){

super(handler);

}

publicvoidonChange(booleanselfChange){

super.onChange(selfChange);

Toast.makeText(MainActivity.this,"数据库的内容变化了.",

1).show();

Uriuri=Uri.parse("content:

//aaa.bbb.ccc");

ContentResolverresolver=getContentResolver();

Cursorcursor=resolver.query(uri,newString[]{"address",

"date","type","body"},null,null,null);

cursor.moveToFirst();

Stringaddress=cursor.getString(0);

Stringbody=cursor.getString(3);

Log.v("MyObserver","body");

cursor.close();

}

}

}

3、案例——短信接收器(PPT17)

老师引导,内容观察者的相关方法已经学习完了,接下来将通过案例“短信接收器”来巩固内容观察者的用法。

老师针对案例进行总结,并说明在使用内容观察者需要注意的事项。

三、知识巩固

1、总结知识点,使用博学谷系统中的随堂练习题巩固本节课所学知识。

2、使用博学谷系统中的测试题给学生布置作业。

第五、六学时

(上机练习)

1、完成教材中所有教学案例以及课后习题中的上机练习。

2、使用博学谷系统中的测试题给学生布置上机练习,或者老师自行安排上机练习。

思考和练习

见教材第6章课后习题

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1