Android Studio移动应用开发任务教程微课版教案6.docx
- 文档编号:29181318
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:46
- 大小:1.84MB
Android Studio移动应用开发任务教程微课版教案6.docx
《Android Studio移动应用开发任务教程微课版教案6.docx》由会员分享,可在线阅读,更多相关《Android Studio移动应用开发任务教程微课版教案6.docx(46页珍藏版)》请在冰豆网上搜索。
AndroidStudio移动应用开发任务教程微课版教案6
教学单元:
移动应用开发(13)
授课班级:
授课时间:
4
教学地点:
教学目的:
⏹应知:
1、了解Android网络访问基本概念;
2、了解数据传输方式;
⏹应会:
1、能够配置服务端;
2、能够使用异步任务完成网络通信;
3、能完成简单Android程序的开发。
教学重点、难点:
1.服务端配置
2.异步任务
教学方法:
根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法:
1.在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。
2.在实践教学上,采用“实例引导,项目驱动”的方式讲授。
通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。
钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。
3.注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。
教学过程设计:
备注:
1.课程设计
(1)回顾上一章的内容,提出本次课程的目标----配置服务端,并使用异步任务实现网络通信。
(2)首先打开控制面板---程序---启用或关闭Windows功能。
勾选IIS及A4.7,然后点击确定。
(3)完成后,在浏览器中输入localhost,测试是否成功。
(4)下面我们将在IIS中配置我们的服务端,首先,打开IIS管理器。
(5)停止默认网站,然后,鼠标右键单击“网站”节点,选择“添加网站…”。
(6)在弹出的对话框中,设置相关信息,单击“确定”按钮,完成新网站的设置。
(7)确定后,启动该网站,打开浏览器输入
http:
//localhost/webform1.aspx,将会出现下面的错误。
(8)打开控制面板---程序---启用或关闭Windows功能---InternetInformationService---万维网服务,勾选红色框的选项,然后确定。
(9)安装完成后,重新在浏览器中输入
http:
//localhost/webform1.aspx。
(10)这是System.Data.SQLite.dll是32位程序,在iis管理器中,鼠标右键选择应用程序池中的SoccerApp。
点击“高级设置”,启用32位应用程序。
(11)完成后,重新在浏览器中输入
http:
//localhost/webform1.aspx。
显示如下信息,表示服务端安装成功。
(12)了解学生进度。
(13)配置好服务端后,提出问题,我们如何获取网络上的数据?
介绍网络通信的基本概念、原理和实现方式,明确本课程主要采用基于HTTP的网络通信。
(14)以访问XX网站为例,展示如何获取服务端响应信息。
首先设计界面,当用户点击按钮时,向服务端发送请求,并获取响应信息。
button.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
try{
HttpURLConnectionurlConn=(HttpURLConnection)new
URL("").openConnection();
intresponseCode=urlConn.getResponseCode();
if(responseCode==HttpURLConnection.HTTP_OK){
InputStreamis=urlConn.getInputStream();
ByteArrayOutputStreambaos=newByteArrayOutputStream();
intn=0;
byte[]buf=newbyte[1024];
while((n=is.read(buf))!
=-1){baos.write(buf,0,n);}
Stringstr=baos.toString("UTF-8");
Log.i("Test",str);
}
urlConn.disconnect();
}catch(IOExceptione){
e.printStackTrace();
}
}
});
(15)点击运行,出现NetworkOnMainThreadException异常,即对于网络访问,Android要求放在线程中进行。
回顾一下线程的相关知识,创建内部类MyThread实现了Runable接口,重写run()方法。
将刚才点击按钮中的相关代码,放到run()方法中。
classMyThreadimplementsRunnable{
@Override
publicvoidrun(){
try{
HttpURLConnectionurlConn=(HttpURLConnection)new
URL("").openConnection();
intresponseCode=urlConn.getResponseCode();
if(responseCode==HttpURLConnection.HTTP_OK){
InputStreamis=urlConn.getInputStream();
ByteArrayOutputStreambaos=newByteArrayOutputStream();
intn=0;
byte[]buf=newbyte[1024];
while((n=is.read(buf))!
=-1){baos.write(buf,0,n);}
Stringstr=baos.toString("UTF-8");
Log.i("Test",str);
}
urlConn.disconnect();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
(16)当用户点击按钮时,启动该线程。
Threadwt=newThread(newMyThread());
wt.start();
(17)点击运行后,显示Permissiondenied(missingINTERNETpermission?
)异常,即没有声明网络访问权限。
在AndroidManifest中设置相关权限。
name="android.permission.INTERNET"> (18)点击运行,在Logcat中查看到相关信息。 下面,我们将这个信息用TextView显示出来,即在线程中,对tv显示内容进行设置。 修改代码后,运行,显示CalledFromWrongThreadException: Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.异常,即对于界面上的控件,它们是在主线程中创建的,不能在工作线程中访问。 (19)介绍Handler类相关知识,修改代码,在MainActivity中创建Handler的对象handler,并重写handleMessage()方法。 privateHandlerhandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ tv.setText(msg.obj.toString()); } }; (20)在线程中,不直接给tv设置信息,而是将相关信息通过handler发送出去。 Messagemsg=newMessage(); msg.obj=str; handler.sendMessage(msg); (21)点击运行,成功显示信息。 总结一下使用多线程结合Handler实现获取服务端信息的过程及注意的问题。 可以看出,这种做法相对比较复杂,那么有没有简单的方式呢? ----异步任务 (22)介绍异步任务的相关知识,展示需要完成的项目。 (23)首先测试服务端的响应是否正确,注意,此处标黄的地方为当前电脑的IP地址。 http: //10.1.102.44/SoccerDataHandler.ashx? action=getTeamStr。 (24)在工程HttpTest中,新建一个Activity,命名为TeamActivity,并将其设置为启动的Activity。 打开activity_team.xml,切换到Design视图,将ListView拖入界面,设置相应约束,同时,设置TextView的id为tvNoData,Text属性值为“没有数据”。 (25)设置当ListView没有数据时,显示的信息,lvCountry.setEmptyView(tvNodata)用来设置当ListView中没有数据时显示的内容。 (26)访问服务端,将获取的国家名称字符串用ListView来显示。 这里,我们使用异步任务来实现该功能。 首先,新建类StrGetTask,继承自AsyncTask,并指定相关泛型,重写相关方法(这里我们重写两个方法)。 publicclassStrGetTaskextendsAsyncTask @Override protectedStringdoInBackground(String...params){ returnnull; } @Override protectedvoidonPostExecute(Strings){ super.onPostExecute(s); } } (27)在doInBackground(String...params)方法中,访问服务端,并获取返回数据。 protectedStringdoInBackground(String...params){ try{ HttpURLConnectioncon=(HttpURLConnection)new URL(params[0]).openConnection(); intcode=con.getResponseCode(); if(code==HttpURLConnection.HTTP_OK){ InputStreamis=con.getInputStream(); ByteArrayOutputStreambaos=newByteArrayOutputStream(); intn=0; byte[]buf=newbyte[1024]; while((n=is.read(buf))! =-1){ baos.write(buf,0,n); } Stringstr=baos.toString("UTF-8"); Log.i("Test",str); returnstr; } }catch(IOExceptione){ e.printStackTrace(); } returnnull; } (28)在onPostExecute(Strings)方法中,将获得的数据显示在ListView中。 由于StrGetTask类是一个外部类,不能访问MainActivity类中的lvCountry,因此,我们需要将数据集合和相关的adapter对象传入StrGetTask中,使用adapter的notifyDataSetChanged()方法刷新ListView中的数据。 修改StrGetTask类的代码,添加两个成员变量,定义带参数的构造器方法初始化这两个成员变量。 publicclassStrGetTaskextendsAsyncTask privateList privateArrayAdapter publicStrGetTask(List this.list=list; this.adapter=adapter; } //。 。 。 以下代码不变,故省略 } (29)修改onPostExecute(Strings)方法中的代码,刷新ListView中的数据。 protectedvoidonPostExecute(Strings){ if(s! =null){ List list.clear(); list.addAll(strList); adapter.notifyDataSetChanged(); } } (30)切换回TeamActivity.java中,修改相关代码,调用异步任务,实现网络访问。 publicclassMainActivityextendsAppCompatActivity{ privateTextViewtvNodata; privateListViewlvCountry; privateList privateArrayAdapter @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvNodata=(TextView)findViewById(R.id.tvNoData); lvCountry=(ListView)findViewById(R.id.lvCountry); lvCountry.setEmptyView(tvNodata); list=newArrayList adapter=newArrayAdapter lvCountry.setAdapter(adapter); newStrGetTask(list,adapter).execute( "http: //10.1.102.44/SoccerDataHandler.ashx? action=getTeamStr"); } } (31)点击运行,验证程序能否正确运行,了解学生进度。 作业: 教学单元: 移动应用开发(14) 授课班级: 授课时间: 2 教学地点: 教学目的: ⏹应知: 1、了解JSON的基本概念; 2、了解JSON数据的解析; ⏹应会: 4、能够使用Gson解析JSON数据; 5、能够处理复杂结构的网络数据; 6、能使用异步任务实现Android网络通信程序。 教学重点、难点: 3.Gson解析JSON数据 4.异步任务实现较为复杂的网络通信程序 教学方法: 根据本堂课教学内容的重点与难点,教学过程中主要采用以下教学方法: 4.在理论教学上,主要在钉钉平台上进行,以讲授和教学演示为主,通过提问引导学生发现问题、分析问题,掌握Android软件开发的基本概念和流程。 5.在实践教学上,采用“实例引导,项目驱动”的方式讲授。 通过实现相关实例,在实例基础上改造拓宽,真正实现“学以致用”。 钉钉和QQ相结合,采用演示、实践和讨论相结合的模式。 6.注重教学整体过程设计,依托网络平台,将课前预习、课中讲授与演练和课后练习与讨论答疑有机结合,不断摸索提高教学效果。 教学过程设计: 备注: 1.课程设计 (1)回顾上一节课的内容,提出本次课程的目标----如何处理复杂结构的网络数据。 这主要牵涉如何表述数据、如何获取数据以及如何解析数据几个问题。 (2)首先我们来看看如何表述一个复杂结构的数据。 在程序中,我们通常是用类来描述数据的,比如,我们描述一张数据表中的数据,首先会根据表的定义,设计一个实体类,然后用集合来描述一组这样的数据,在程序中传递数据,我们可以方便的使用数据对象来实现,但是如果我们需要将这些数据通过网络传输,则不适合使用对象的形式,而需要将其转换为一个字符串数据,那么如何描述这样一组数据呢? 目前主要有XML和JSON两种形式,这里我们采用JSON方式。 简单介绍JSON的相关知识。 (3)采用JSON格式来传输数据,那就需要做两方面的工作,第一是将数据对象转换为JSON格式的字符串(序列化),第二是将JSON格式的字符串转换为数据对象,方便程序使用(反序列化)。 那么如何解析JSON格式的数据呢? Google为我们提供的Gson,能够方便实现。 (4)下面,我们用一个简单的例子来演示一下如何使用Gson实现对JSON数据的序列化和反序列化。 (5)新建工程“Ex06_GsonTest”,设计界面如下。 (6)定义实体类Student。 publicclassStudent{ privateStringStuNum; privateStringStuName; privateintStuAge; 。 。 。 。 。 } (7)为了使用Gson,我们首先需要将Gson引入到工程中,打开build.gradle文件,找到“dependencies”节,输入相关代码,然后,单击图6-12中右上角的“SyncNow”链接,AndroidStudio会自动实现对Gson的引用。 。 (8)打开MainActivity.java文件,实现序列化的功能,即当用户单击“序列化”按钮时,我们将使用Gson将一个Student对象序列化并输出到TextView中。 Studentstudent=newStudent("18010001","张三",18); Gsongson=newGson(); tvInform.setText(gson.toJson(student)); (9)在MainActivity.java文件中,实现反序列化的功能,即当用户单击“反序列化”按钮时,我们将使用Gson将一个JSON字符串转换为Student对象并将相关信息输出到TextView中。 Stringjson="{\"StuName\": \"李四\",\"StuNum\": \"18010002\",\"StuAge\": 17}"; Gsongson=newGson(); Studentstudent=gson.fromJson(json,Student.class); tvInform.setText("生成Student对象: "+student.getStuName()+"成功"); (10)下面以显示图文混排的球队信息为例,使用Gson来解析JSON数据。 新建工程“SoccerTeams”,设计MainActivity界面。 (11)将logo.png、soccer.png和good1.jpg文件复制到res/drawable目录下。 然后,在res/layout目录下,新建ListView数据项的布局文件item_team.xml。 (12)在浏览器中输入如下网址,测试服务端工作是否正常。 http: //10.1.102.44/SoccerDataHandler.ashx? action=getTeamWithFlagList。 (13)引入Gson2.8.2。 (14)因为在本项目中,服务端已经完成了对数据的序列化,因此Android端只需要将JSON数据反序列化生成数据对象即可。 而通过Gson进行反序列化操作,首先需要根据返回数据定义相应的实体类,当数据结构比较简单时,我们可以直接手工实现,但当数据较为复杂时,就比较麻烦了。 这里通过引入GsonFormat插件来自动完成实体类的定义工作。 (15)单击菜单“File”→“Settings”选项,弹出“Settings”对话框。 选择“Pulgins”,然后单击“Browserepositories”按钮,弹出“Browserepositories”对话框。 搜索“GsonFormat”,然后单击“Install”按钮,等待安装完成。 根据系统提示,重启AndroidStudio。 (16)然后,我们使用GsonFormat插件来自动生成实体类的定义。 新建包“cn.edu.szpt.soccerteams.beans”,并在该包中,新建实体类TeamBean。 (17)打开TeamBean类,按下“Alt+Insert”快捷键,在弹出的菜单中选择“GsonFormat”命令。 (18)在弹出的对话框中,将服务端返回的JSON数据粘贴到文本框中,然后,单击“OK”按钮,GsonFormat将会自动列出JSON数据中的键Key、值Value、数据类型以及生成的实体类中建议的成员变量名称。 单击“OK”按钮,GsonFormat将会自动根据JSON数据生成实体类的代码。 (19)新建包“cn.edu.szpt.soccerteams.adapters”,并在该包下,新建类TeamAdapter,继承自BaseAdapter。 publicclassTeamAdapterextendsBaseAdapter{ privateContextcontext; privateList publicTeamAdapter(Contextcontext,List this.context=context; this.list=list; } @Override publicintgetCount(){ returnlist.size(); } @Override publicObjectgetItem(intposition){ returnlist.get(position); } @Override publiclonggetItemId(intposition){ returnposition; } @Override publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ if(convertView==null){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android Studio移动应用开发任务教程微课版教案6 Studio 移动 应用 开发 任务 教程 微课版 教案