天气客户端开发报告

1系统需求分析

1.1功能性需求分析

天气预报客户端,最基本就是为用户提供准确的天气预报信息。天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度、天气状况外还可以提示穿衣建议、湿度、风向等信息,这样使天气信息更加完善;一种是未来几天天气预报信息,提供未来几天的天气状况,方便用户的出行预判。

1.2非功能需求分析

  为了保证客户端能够长期、安全、稳定、可靠、高效的运行,天气客户端应该满足以下的需求:

1)系统处理的准确性和及时性

2)系统的开放性和系统的可扩充性

3)系统的易用性和易维护性

4)系统的资源低消耗性

1.3 UML用例图

用例名称:菜单界面

参与者:用户

简要说明:用户选择城市后,点击查询,即可在首页显示天气信息

前置条件:用户已经进入天气查询软件

基本事件流:1.用户在输入栏输入城市名称,点击查询,获取该城市天气信息

2.用户在下拉栏选择城市名称,点击查询,获取该城市天气信息

3.用例终止

其他事件流:在点击查询前,输入或选择任意城市名都不会显示结果

异常事件流:天气信息获取失败时,界面提示错误信息

后置条件:显示城市一星期以内天气信息

2系统架构设计

2.1界面架构

  结合用户查询习惯,在主界面我们可以提供两种查询方法:

  1.输入查询:
  在城市输入栏中输入所需查询城市的名字,点击查询按钮即可显示出天气信息。

  2.选择查询:
  针对常见大中型城市,如北京、上海等,为方便用户查询,只要在预设城市的下拉栏中寻找用户所查找城市,点击查询按钮即可显示出天气信息。

用Axure RP 画出的界面设计图如下:

2.2功能模块

  

  从模块结构图可以看出,后台服务是整个程序的核心,主要是数据获取模块,负责从haoserver天气预报服务接口获得天气信息。后台服务可以通过查询服务来启动。

3系统详细设计

3.1 UI界面设计

3.1.1主界面设计

  Android用户布局都是在布局在XML文件中,这些XML文件放在工程/res/layout下。在安卓系统中,开发人员把用户界面放在在XML文档中定义,可以使XML文档专门负责用户UI界面设计,而java程序负责功能实现,从而降低程序耦合,便于程序的维护与扩展。

  多数的界面控件都在android.view和android.widget包中,android.view.View为他们的父类。

  在activity.main主界面XML文件中,定义了TextView、Button、ExitText、这三种基本控件,它们分别表示文字显示、按钮切换、文本输入。TextView用来显示静态文本文显示,Button用来控制“查询”键,ExitText用来输入所查询城市名字。

  主界面XML文件还定义了ListView、Spinner这两个需要适配器的布局文件和LinearLayout、RelativeLayout布局文件。ListView、Spinner分别用来显示天气查询结果列表、下拉栏里的城市,LinearLayout、RelativeLayout分别表示线性布局和相对布局,控制整个主界面的布局。

3.1.2天气内容界面实现

  在list_item.XML文件中通过LinearLayout布局文件的设置将天气结果以下表的格式显示出来

date

week

weather

tempt

wind

dressing_advice

3.2 系统模块设计

  整个系统由四个模块组成

系统模块

模块功能

ConstData

存放预设城市

Weather

设置当天和未来几天天气类

chacun

解析并获得天气信息

MainActivity

天气查询主界面

3.2.1 设置天气类Weather

  设置一个天气类Weather,以便查询和显示天气。

  (1)定义私有变量

  使用private定义私用成员city、date、week、weather、temperature、wind、dressing_advice,使用户不能私自提取天气数据,只能按照自己构造的方法提取出来。

  (2)构造函数

  通过重载构造函数Weather创建有参和无参两种对象方式,增强系统使用弹性。既能运用反射机制生成对象,用能为继承使调用Weather类构造函数方便。

  (3)提供取值方法

  运用反射机制getClass和setClass的方法,提供获得天气具体数据的方法。

3.2.2天气查询功能设计

  (1)解析天气信息

  

  天气预报系统最重要的就是获取天气信息,为获得实时天气信息,我们就要访问专门天气信息的网站把返回的信息解析出来。

  系统采取HttpURLConnection的访问方式来和Web 客户机取得联系,并以字节数组的方式返回。其中urlPath由三部分组成:

信息源网址

cityname

key

  其中信息源网址由haoservice服务平台提供提供,cityname为所查询城市的名字,key表示用户标识。

  我通过http://apis.haoservice.com/weather这个网站提供的参数来获取指定城市的天气信息。它主要使用JSON(JavaScript Object Notation)数据交换格式,可以在在异步应用程序中将字符串从 Web 客户机传递给服务器端,有对象object和数组array这两种数据结构。对象是一个无序的“‘名称/值’对”集合,数组是值(value)的有序集合。

  (2)获得天气信息

  将解析后的JSON格式天气数据分别赋值给定义的todayWeather类和we类,它们是实例化的天气类Weather,分别表示当天天气信息和未来天气信息,最后添加到数组列表weathers中。这样就能获得天气信息。

3.2.3主程序设计

  (1)设置Activity界面

  使用Activity中的onCreate方法来初始化Activity实例对象,构建参数saveInsanceState保存实例状态。

  通过setContentView(R.layout.activity_main)将主程序MainActivity采用activity_main布局。利用findViewById函数将主程序按钮与布局文件一一对应,对应列表如下:

主程序MainActivity

activity_main界面

currentCityTv

currentCity

city_Et

cityEt

city_spr

citySpinner

mListView

mListView

   其中下拉栏Spinner与显示列表Listview绑定对应的适配器。适配器将布局文件和数据连接。

  (2)显示天气

  为天气结果显示列表ListView绑定一个适配器myAdapter,通过myAdapter.notifyDataSetChanged通知MainActivity更新显示ListView。配器myAdapter类图如下:

  适配器myAdapter是实例化的MyAdapter,继承 BaseAdapter类。ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到 listView的长度,然后根据这个长度,调用getView()逐一绘制每一行。getItem返回该对象本身,getItemid返回该对象的索引。getView()有三个参数:int position, View convertView, ViewGroup parent。position表示将显示的是第几行,covertView是从布局文件中inflate来的布局,即list_item.XML文件中的布局。

  在getView函数中使用ViewHolder的作用是用来优化显示效率,即之前显示过的不用再从布局文件读取,直接从缓存中读取。它只是一个静态类,它的作用就在于减少不必要的调用findViewById,把对底下的控件引用存在ViewHolder里面,再用convertView.setTag(holder)把它放在view里,下次就可以用(ViewHolder) convertView.getTag()直接取了。

  (3)利用Handler来实现天气信息更新

  Handler与调用者处于同一线程,如果Handler里面做耗时的动作,调用者线程会阻塞,这种操作线程是不安全的。因此本程序采取调用线程Thread(Runnable),在线程中处理操作。Thread线程发出Handler消息,通知更新,Handler根据接收的消息,处理更新。

  Thread线程在查询完天气后发出msg信息,Handler根据接收的消息显示查询结果。

4系统测试

4.1测试目的

1.确定软件质量,确保软件正确运行。

2.确定信息正确性,确保天气情况与实际相符。

4.2测试内容

编号

权限

测试页

描述/输入/操作

期望结果

真实结果

备注

01

列表页面

在文本栏中输入城市

显示输入城市

显示输入城市

测试图1

02

在下拉栏中选择城市

显示选择城市

显示选择城市

测试图2

03

在文本栏中输入城市

点击查询

显示输入城市及对应天气信息

显示输入城市及对应天气信息

测试图3

04

在下拉栏中选择城市

点击查询

显示选择城市及对应天气信息

显示选择城市及对应天气信息

测试图4

05

在输入栏中输入不存在的城市点击查询

显示查询错误及其原因

显示查询错误及其原因:该城市名称错误或不支持该城市

测试图5

06

不输入城市查询

显示查询错误及其原因

显示查询错误及其原因:查询错误不能为空

测试图6

1.在文本栏中输入城市

2.在下拉栏中选择城市

3.在文本栏中输入城市,点击查询

4.在下拉栏中选择城市,点击查询

5.在输入栏中输入不存在的城市

6.不输入城市查询

                                 5代码上传

  将代码压缩包上传至oschina,网址如下:http://www.oschina.net/code/snippet_2556588_53007

6总结

  本次实验主要完成了一款基于android平台的天气预报软件的设计与实现。提出了android用户界面设计、获取并解析城市列表数据的办法,给出了在用户界面上的原理与实现过程,最后通过模拟器进行了应用程序的调试。

  从一开始什么都不懂到最后摸索完成这个软件收获很多,主要熟悉了Android环境搭建、界面控局布置、获取数据和整体设计方案。最终实现选择城市和显示天气预报结果功能。在开发中遇到很多问题:数据源不提供接口服务、代码不够健壮、JSON数据显示不全、Key过期,最终问题都得到解决。

  本程序能实现当日及未来一个星期的天气预报,有良好的稳定性及扩展性,但是有待完善的地方依然很多,未来改进时可以考虑一下几点:加入国际城市;根据不同天气状态动态变化背景图片;可以添加常用城市;将软件做成桌面小窗口方便查询。这些功能都需要在日后学习中不断探索研究,以建立实用的天气预报系统。

  感谢娄老师和同学们给予我的帮助!

Android实践项目汇报(总结)-修改的更多相关文章

  1. Android实践项目汇报

    Android实践项目:推箱子 推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻辑思维能力.游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置.这就要求玩家巧妙的运用有限的空间和通道 ...

  2. android 实践项目 总结 (修改)

    Android手机定位与地图实现 在一个不熟悉的环境中,获得自己的位置,选择合适的就餐地点,住宿和公交路线成为一项难题.本次的实践项目就是为了解决上述难题的,通过调用百度地图的接口实现定位.查询公交路 ...

  3. Android实践项目汇报总结(上)修改

    微博客户端的设计与实现(上) 第一章 绪论 1.1课题背景 微博可以说是时下最受人们所喜爱的一种社交方式,它是一种通过关注机制分享简短实时信息的广播式的社交网络平台.通过微博我们可以了解最新的时事新闻 ...

  4. Android实践项目汇报(二)

    Google天气客户端 本周学习计划 学习布局控件和XML解析的相关知识. 看懂程序代码. 把借鉴代码成功导入到Android Studio中并运行成功. 实际完成情况 我学习到布局控件XML在res ...

  5. Android实践项目汇报-改(一)

    Google天气客户端NABC Need(需求):  功能性需求分析 天气预报客户端,顾名思义就是为用户提供实时准确的天气信息,方便用户出行生活.根据用户日常需求,软件完成后点开,载入界面,显示查询界 ...

  6. Android实践项目汇报(四)

    全国天气客户端 本周学习计划 添加修改功能,完成项目 实际完成情况 1.成功显示当天及后几天的天气信息 通过修改chaxun.java程序,比较JSON数据格式中JSONObject("to ...

  7. Android实践项目汇报(三)

    Google天气客户端 本周学习计划 调试代码使之成功运行并实现天气预报功能. 实际完成情况 由于google取消api接口服务,天气源的传输.所以我换了一个使用 haoserver API接口的程序 ...

  8. Android实践项目汇报(一)

    # 我要做的是Google天气客户端 一.Need(需求): 1. 功能性需求分析 天气预报客户端,顾名思义就是为用户提供实时准确的天气信息,方便用户出行生活.根据用户日常需求,软件实现后所达到的功能 ...

  9. Android实践项目汇报(总结)

    天气客户端开发报告 1    系统需求分析 1.1功能性需求分析 天气预报客户端,最基本就是为用户提供准确的天气预报信息.天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度.天气状况外还 ...

随机推荐

  1. are not called implicitly

    php.net <?php class BaseClass{ function __construct() { print "In BaseClass constructor<b ...

  2. Borg Maze---poj3026最小生成树+bfs

    题目链接:http://poj.org/problem?id=3026 题意:可以理解为给你一个地图上面有S和A的表示一个一个的点,#表示墙,所以需要我们用bfs来计算各点之间的距离: b[i][j] ...

  3. epoll详细工作原理(转)

    原文:没有找到出处 开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll.大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的sock ...

  4. MySQL(4):主从复制原理

    1.主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群架构的基础.它通过将一台主机的数据复制到其他一台或多台主机上,并重新应用relay log中的SQL语句来实现 ...

  5. ansible 批量在远程主机上执行命令

    ansible 和 saltstack 都是为了同时在多台主机上执行相同的命令, 但是 salt配置麻烦,ansible基本不用配置, ansible 通过ssh来连接并控制被控节点 1. 安装 第一 ...

  6. __getattr__,settr

    __getattr__  如果属性查找在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数, 如果没有定义这个函数,那么抛出AttributeError异常. ...

  7. Java学习之路-Spring的HttpInvoker学习

    Hessian和Burlap都是基于HTTP的,他们都解决了RMI所头疼的防火墙渗透问题.但当传递过来的RPC消息中包含序列化对象时,RMI就完胜Hessian和Burlap了. 因为Hessian和 ...

  8. 奇特的Local System权限(转载)

    转载自:http://mp.weixin.qq.com/s?__biz=MzA3NTM1MzE4Nw==&mid=202597764&idx=1&sn=0cef1a40fb3c ...

  9. react.js 之 create-react-app 命令行工具系统讲解

    react.js 教程之 create-react-app 命令行工具系统讲解 快速开始 npm install -g create-react-app create-react-app my-app ...

  10. FDR错误发现率-P值校正学习[转载]

    转自:https://baike.baidu.com/item/FDR/16312044?fr=aladdin  https://blog.csdn.net/taojiea1014/article/d ...