安卓天气预报查询app实验报告Word文档下载推荐.docx
《安卓天气预报查询app实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《安卓天气预报查询app实验报告Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
指导老师:
孙霞
设计地点:
N6-113
开课时间:
至年第1学期
1.引言
1.1.题目描述
此次试验是开发一款基于Android平台天气预报应用,将网络系统功效扩展到智能手机终端上,让手机能够经过移动网络访问Web网站并处理多种多样业务,能够让智能手机用户能够随时随地查询互联网所提供天气信息。
1.2.设计意义
能够让广大Android手机用户能够在第一时间获取最新天气预报信息,方便提前预防,方便出行。
同时,把气象灾难造成损失降到最低,也能够提升公共服务质量,愈加好发挥气象事业对经济社会发展现实性作用,有巨大实用价值。
即使该技术在Android平台已经比较成熟,不过经过该软件开发仍然能帮助我愈加好认识Android系统工作原理。
2.开发环境
2.1.硬件环境
戴尔灵越笔记本电脑
2.2.软件环境
Android上层应用程序是用Java语言开发,通常情况下是基于Dalvik虚拟机,所以谷歌企业推荐使用主流Java集成开发环境Eclipse。
而用Java语言进行开发,需要用到SUN企业提供Java
SDK(其中包含JRE:
Java
Runtime
Environment)。
另外,Android应用程序开发和Java开发有较大区分,需要使用谷歌提供Android
SDK。
同时,要在Eclipse上安装ADT,为Android开发提供开发工具升级或者变更,是Eclipse下开发工具升级或下载工具。
简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序开发。
(1)
Java
SDK
(2)
Eclipse
(3)
Android
(4)
ADT
3.相关技术及知识点
3.1.Activity
应用程序中,一个Activity通常就是一个单独屏幕,它上面能够显示部分控件也能够监听并处理用户事件做出响应。
Activity之间经过Intent进行通信。
在Intent描述结构中,有两个最关键部分:
动作和动作对应数据。
经典动作类型有:
MAIN(activity门户)、VIEW、PICK、EDIT等。
而动作对应数据则以URI形式进行表示。
比如:
要查看一个人联络方法,你需要创建一个动作类型为VIEWintent,以及一个表示这个人URI。
与之相关系一个类叫IntentFilter。
相对于intent是一个有效做某事请求,一个intentfilter则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。
一个activity假如要显示一个人联络方法时,需要申明一个IntentFilter,这个IntentFilter要知道怎么去处理VIEW动作和表示一个人URI。
IntentFilter需要在AndroidManifest.xml中定义。
经过解析多种intent,从一个屏幕导航到另一个屏幕是很简单。
当向前导航时,activity将会调用startActivity(IntentmyIntent)方法。
然后,系统会在全部安装应用程序中定义IntentFilter中查找,找到最匹配myIntentIntent对应activity。
新activity接收到myIntent通知后,开始运行。
当startActivity方法被调用将触发解析myIntent动作,这个机制提供了两个关键好处:
A、Activities能够反复利用从其它组件中以Intent形式产生一个请求;
B、Activities能够在任何时候被一个含有相同IntentFilter新Activity替换。
3.2.Service
一个Service是一段长生命周期,没有用户界面程序,能够用来开发如监控类程序。
比很好一个例子就是一个正在从播放列表中播放歌曲媒体播放器。
在一个媒体播放器应用中,应该会有多个activity,让使用者能够选择歌曲并播放歌曲。
然而,音乐重放这个功效并没有对应activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放。
在这个例子中,媒体播放器这个activity会使用Context.startService()来开启一个service,从而能够在后台保持音乐播放。
同时,系统也将保持这个service一直实施,直到这个service运行结束。
另外,我们还能够经过使用Context.bindService()方法,连接到一个service上(假如这个service还没有运行将开启它)。
当连接到一个service以后,我们还能够service提供接口与它进行通讯。
拿媒体播放器这个例子来说,我们还能够进行暂停、重播等操作。
Service使用步骤以下:
(1)继承service类;
(2)AndroidManifast.xml配置清单文件中<
application>
节点里对服务进行配置<
servicename="
.SMSService"
/>
。
服务不能自己运行,需要经过Contex.startService()或Contex.bindService()开启服务
经过startService()方法开启服务于调用者没相关系,即使调用者关闭了,服务仍然运行想停止服务要调用Context.stopService(),此时系统会调用onDestory(),使用此方法开启时,服务首次开启系统先调用服务onCreate()-->
onStart(),假如服务已经开启再次调用只会触发onStart()方法。
使用bindService()开启服务与调用者绑定,只要调用者关闭服务就终止,使用此方法开启时,服务首次开启系统先调用服务onCreate()-->
onBind(),假如服务已经开启再次调用不会再触发这2个方法,调用者退出时系统会调用服务onUnbind()-->
onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()-->
onDestory()。
3.3.网络通信
JSON数据解析:
(1)JavaScriptObjectNotation是一个轻量级数据交换格式;
(2)AndroidAPI中直接支持对JSON数据处理;
(3)常见类JSONObject、JSONArray、JSONStringer和JSONTokener等;
(4)数据在名称/值对中、数据由逗号分隔、花括号保留对象、方括号保留数组。
HttpURLConnection:
提供了基于HTTP网络访问方法,关键操作步骤为:
(1)利用URL地址实例化URL类;
(2)由URL类创建HttpURLConnection对象;
(3)以GET/POST方法向服务器发送请求;
(4)接收服务器响应。
4.需求分析
4.1.系统功效需求分析
(1)能够由用户设置省份城市;
(2)依据用户设置城市,点击刷新按钮获取当地当日日期、天气信息以及未来六天天气情况。
(3)以淡入淡出方法显示主页面;
(4)打开软件时能够自动播放音乐,用户能够在Menu菜单里选择关闭音乐;
(5)Menu菜单里能够查看开发者信息。
4.2.系统步骤图
否
是
图4-1系统步骤图
4.3.系统界面需求分析
现在中国软件开发者在设计过程中很重视软件开发技术及其含有业务功效,而忽略了用户对软件界面需求,影响软件易用性、友好性。
界面设计要简约、美观,不能太复杂,让用户操作起来太繁琐,影响用户使用体验,要在交互性与应用性上让用户感到舒适,让用户正确、高效、轻松、愉快地完整天气查询,所以软件友好性、易用性对软件系统至关关键。
4.4.系统性能需求分析
软件在完成功效需求以后,还要深入优化,不能占用手机太多内存资源,在交互性上使用户取得最好感受,让使用不一样手机设备用户都能有良好地体验。
5.设计与实现
5.1.界面布局
在页面布局上,因为界面设计比较简单,所以只使用了基础横向布局和纵向布局,横向布局与纵向布局交替使用,完成了天气预报界面设计。
图5-1界面布局图5-2软件主界面
图5-3开启界面图5-4天气信息界面
图5-5刷新界面图5-6作者信息界面
5.2.省市二级联动
将老师给中国省市编号手动输入到strings.xml文件中,再定义省份和城市编号两个数组,再定义ArrayAdapter,在两个下拉框上分别放上监听器,将省份与城市进行绑定,将所选择城市城市编号存放到一个数组之中,方便以后进行天气信息获取。
关键代码:
privateint[]cities={R.array.beijing,R.array.tianjin,R.array.hebei,R.array.shanxi1,R.array.neimenggu,R.array.liaoning,
R.array.jilin,R.array.heilongjiang,R.array.shanghai,R.array.jiangsu,R.array.zhejiang,R.array.anhui,R.array.fujian,R.array.jiangxi,R.array.shandong,R.array.henan,R.array.hubei,R.array.hunan,R.array.guangdong,R.array.guangxi,R.array.hainan,R.array.chongqing,R.array.sichuan,R.array.guizhou,R.array.yunnan,R.array.xizang,R.array.shanxi3,R.array.gansu,R.array.qinghai,R.array.ningxia,R.array.xinjiang,R.array.taiwan,R.array.xianggang};
privateint[]citycode={R.array.bei_jing,R.array.tian_jin,
R.array.he_bei,R.array.shan_xi1,R.array.nei_meng_gu,
R.array.liao_ning,R.array.ji_lin,R.array.hei_long_jiang,
R.array.shang_hai,R.array.jiang_su,R.array.zhe_jiang,
R.array.an_hui,R.array.fu_jian,R.array.jiang_xi,
R.array.shan_dong,R.array.he_nan,R.array.hu_bei,R.array.hu_nan,
R.array.guang_dong,R.array.guang_xi,R.array.hai_nan,
R.array.chong_qing,R.array.si_chuan,R.array.gui_zhou,
R.array.yun_nan,R.array.xi_zang,R.