基于Android的天气预报的设计与实现.doc
- 文档编号:30578639
- 上传时间:2023-08-17
- 格式:DOC
- 页数:10
- 大小:48KB
基于Android的天气预报的设计与实现.doc
《基于Android的天气预报的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Android的天气预报的设计与实现.doc(10页珍藏版)》请在冰豆网上搜索。
基于Android的天气预报的设计与实现
目录
1.引言 1
2.系统分析 2
2.1需求分析 2
2.2可行性分析 2
2.3性能分析 3
3.系统设计 3
3.1总体结构设计 3
3.2数据库设计 3
3.3数据获取与显示 5
3.4详细设计 6
4.系统实现 7
4.1软件界面设计 7
4.2天气信息显示模块 7
4.3城市管理显示模块 9
4.4主界面数据请求 12
5.系统测试 12
5.1测试方案设计 12
5.2测试用例创建 13
5.3测试结果分析 14
6.结语 14
参考文献 14
基于Android的天气预报的设计与实现
摘要:
智能手机现在已经成为人们的随身必带物,甚至因为智能手机而出现的一个种族--低头族。
所以智能手机系统已经成为了人们所关注的一个信息,基于手机智能系统的应用程序也开始受人们关注。
在这个智能系统终端的飞速发展过程中,出现了几大权威,如谷歌公司创立的Android系统,苹果公司创立的iOS系统等。
该项目是用eclipse开发工具开发的在Android系统的智能手机上运行的天气预报软件。
这个软件具有显示未来几天内的天气信息和有查看其它城市的天气信息的功能。
与现在市面有出现的天气预报软件相比,这个软件有不用花太多流量就可以查看天气信息;且这个软件完全没有广告的优点。
本项目就在剖析讨论基于Android系统的技术的基石上开发设计,为了使天气预报这个应用程序更加简单明了。
关键词:
Android天气预报手机软件数据库
1.引言
手机智能系统的来临,使人们的生活质量发生改变,如学习,不再需要花时间去图书馆或者书店,人们只需要在手机上下载相关文本,就可以学习到新的东西。
Android系统又是所有手机智能系统的占比率是最大的。
Android开发变成了一种主流趋势。
天气的信息,一直是人们所关系的一个话题。
本项目就是做基于Android系统的天气预报的设计与实现。
天气预报这个APP是一个能提供天气信息的应用程序,可以让人们在现如今这个快节奏的发展过程中随时随地的获取天气信息。
在这个信息与科技飞速发展的时代,我们每天需要获取的信息是非常大的,但是相较于以前传统的天气预报APP来讲,本项目以直观明了的方式,将最新的天气信息传递给用户,让人们在出行之前,只需要点开应用程序就可以看到天气信息,并且天气预报这个应用程序有记录功能,只需要一次配置,长时间不用换的好处。
天气预报以其简单性、明了性、易用性深受广大用户的喜换,而且这个天气预报应用程序的一个亮点在于,不会添加一些广告等影响用户体验的东西。
此项目实现了基于时间点近几天的天气信息情况,还有城市选择,各个城市的天气情况。
2.基于Android的天气预报的系统分析
在开发一个新的项目之前,需要对项目所需要的功能和要求进行分析,经过分析之后,再进行系统分析,根据项目的功能和要求及系统分析之后,编写出整个项目设计开发中的具体设计方案。
且需求分析的不太准确使,会对开发人员在开发的后期进行修改的时候有很大的阻力,因此开发人员对需求分析的准确性非常重视,需求分析已经成为了整个开发过程中最重要的一个环节。
需求分析前期所需要用到的方法,技术必然会影响到软件开发的质量、效率以及最终的运行的结果成败。
2.1需求分析
现阶段,手机已经变成了人们的随身携带物。
且手机的功能变得越来越壮大了,人们可以打开手机的网络服务,获取一些人们上传在网络上的信息;这样就使人们对上网的功能需求就积聚增大,因而也带动了手机软件的发展,并使我国的移动通讯服务也得到了非常大的提升。
越来越多的手机APP被用在手机上,修正了原始系统的缺点。
手机智能系统的飞速发展,从早期的诺基亚无敌的手机塞班系统帝国,到Android系统与iOS系统的出现。
此软件在Android系统的手机上,通过网络查询实现天气状况的报告和未来天气的预报等功能,让人们的出行和生活得到方便和保证。
此软件是利用WebService这个API来获取天气信息的应用程序,点开软件后可以进行城市之间的选择,利用activity所写的界面将这个城市的天气信息,包括温度,风向,天气提示等信息显示出来。
这些数据都是从后台服务获取,从中国天气网上获取天气的相关信息,并将天气的信息存储在手机自带的数据库(SQLite)中,方便用户的观看和更新,即联网获取最新一次,就可接下来一段时间查看。
从上面对此软件的描述,我们可以知道到此软件的功能需求:
(1)首先要启动Weather;
(2)设置界面:
对城市管理和预警管理进行设置;
(3)显示界面:
显示天气信息,其中包括了日期,相关温度,风向,温馨的天气提示等。
2.2可行性分析
2.2.1技术可行性
在软件人员开发Android系统相关应用是所用的开发语言是Java语言,因为Java语言经过这么长时间的更新已经趋于成熟,所以Java语言学习起来简单,且方便的长处。
安卓是开源的系统,学习Android的人非常多,使得Android系统趋于完美。
在eclipse上编写代码,使开发更加便捷。
由此,此项目有技术可行性。
2.2.2操作可行性
一个系统的操作困难与否对于用户的体验是有非常大影响,因为操作非常麻烦困难,就会丢失客户,所以系统应该拥有操作简单,易懂的特点。
本项目是基于Android的软件,只需要用户在手机上安装本系统的APP安装包即可进行操作,操作界面简单明了,只要用户使用过智能手机,便可以进行各项功能的使用。
2.2.3经济可行性
本项目采用eclipse来完成设计与开发,且eclipse是免费开发软件,只需要具备技术,就可以完成开发。
所以这个项目无需花费财力。
只需要花时间去设计编写代码即可完成。
因此,经济可行性可以通过。
2.3性能分析
(1)点击Weather.apk安装此APP。
(2)点击左上角进行城市选择。
(3)点击右上角进行用户登录。
此APP操作简单,设计人性化,应用也方便,没有广告等。
安全性高,数据响应快,方便实用。
3.基于Android的天气预报的系统设计
3.1总体结构设计
此项目是手机APP,将每个功能都独立化,且每个功能模块之间的联系不太紧密,使各个功能达到互不影响的要求。
方便后期的修改。
本项目的总体结构由一个主界面和主界面上的一些功能模块组成,各个模块分为设置按钮、显示天气信息、刷新按钮、设置又有城市管理和预警管理,天气预报系统功能模块图如图1所示
图1天气预报系统功能模块图
3.2数据库设计
本设计运用得数据库是SQLite数据库,大部分的符合sql92规则的数据都能被SQLite所支持,且所有主流的操作系统都可以允许SQLite数据库。
3.2.1数据库存储方法
在该软件中,需要存储天气的一些信息,所以利用Android系统自带的数据库SQLite来存储。
Android平台也为开发人员提供了一个SharedPreferences类,它是一个简单的,小型的存储类,非常适合存储应用程序的一些配置参数以及一些简单的数据,如基于本地的一些登录信息,一会默认设置的参数存储。
采用SharedPreferences这个类的方式去存储数据的时候,数据会存放在扩展名为txt的文件中
(1)使用SharedPreferences这个方法来保存数据的代码有如下:
publicstaticvoidgetCityInfoToShared(Contextcontext){
BufferedReaderbufread=null;
try{
bufr=newBufferedReader(newInputStreamReader(context.getAssets().open("city_and_id.txt")));
Stringline=null;
SharedPreferencessp=context.getSharedPreferences("cityInfo",Context.MODE_PRIVATE);
SharedPreferences.Editoreditor=sp.edit();
while((l=bufread.readLine())!
=null){
if(!
l.equals("")){
String[]data=line.split(",");
editor.putString(data[1],data[0]);}}
mit();
}catch(Exceptione){
Log.e(e.toString(),"加载城市列表失败");
}finally{
try{
if(bufr!
=null)
bufr.close();
}catch(Exceptione){}}}
运行上面的代码,SharedPreferences会把这些数据保存在city_and_id.txt这个文件中,可以在FileExplorer的这个工具打开,在手机文件夹中的data目录下的city_and_id.txt的shared_prefs的目录下。
3.3数据获取与显示
3.3.1数据获取
该项目利用HttpURLConnection这个类来完成数据请求的。
利用这个类,从中国天气网上获取需要的城市的天气信息,然后返回给工具类中的解析类,在经过json解析技术,将数据解析出来,并返回到主界面上的每个组件中显示。
HttpURLConnection网络服务代码如下:
publicstaticStringgetWeatherJsonData(Stringpath){
Log.i("smile",path);
if(TextUtils.isEmpty(path)){
Log.e("提示信息:
","路径不能为空");
returnnull;
}else{
try{
URLurl=newURL(path);
HttpURLConnectionc=(HttpURLConnection)url.openConnection();
c.setRequestMethod("GET");
c.setReadTimeout(5000);
intcode=c.getResponseCode();
if(code==200){
Stringdata=changeInputStreamToString(c.getInputStream());
returndata;
}else{
Log.e("提示信息:
","连接失败");
returnnull;}
}catch(Exceptione){
e.printStackTrace();
Log.e(e.toString(),"获取失败");
returnnull;}}}
数据请求如图2所示
图2数据请求
3.3.2数据显示
将读出的数据利用JSON解析技术,解析出来并显示在写好的组件上。
在该项目中,利用Java的封装技术,让json解析技术封装在jsonutiles.java这个类中。
JSON解析是一种简单小型性的数据格式转换的一种方式,它有着非常好的可读性和方便飞快编写的特点,开发人员给json解析做了很多很好的技术改动,使json解析技术更加简单,使用起来方便便捷。
使得解析出来的数据具有通性,可以在不同的手机智能系统上使用。
因此,在该项目中采用了json解析这个类。
代码如下:
publicstaticWeatherInfogetWeatherInfo(Stringkey,StringjsonData){
try{
JSONObjectjsonObject=newJSONObject(jsonData);
JSONObjectjsonWeather=jsonObject.getJSONObject(key);
WeatherInfoweatherInfo=newWeatherInfo();
weatherInfo.setCity(jsonWeather.getString("city"));
//weatherInfo.setAqi(jsonWeather.getString("aqi"));weatherInfo.setGanmao(jsonWeather.getString("ganmao"));
weatherInfo.setWendu(jsonWeather.getString("wendu"));
JSONArrayjsonDayWeahers=jsonWeather.getJSONArray("forecast");
List<DayWeatherInfo>dayWeatherInfos=newArrayList<DayWeatherInfo>();
for(inti=0;i<jsonDayWeahers.length();i++){
JSONObjectobj=jsonDayWeahers.getJSONObject(i);
DayWeatherInfodayWeatherInfo=newDayWeatherInfo();
dayWeatherInfo.setFengxiang(obj.getString("fengxiang"));
dayWeatherInfo.setFengli(obj.getString("fengli"));
dayWeatherInfo.setHigh(obj.getString("high"));
dayWeatherInfo.setLow(obj.getString("low"));
dayWeatherInfo.setType(obj.getString("type"));
dayWeatherInfo.setDate(obj.getString("date"));
dayWeatherInfos.add(dayWeatherInfo);}
weatherInfo.setForecast(dayWeatherInfos);
JSONObjectjsonObject1=jsonWeather.getJSONObject("yesterday");
DayWeatherInfodayWeatherInfo=newDayWeatherInfo();
dayWeatherInfo.setFengxiang(jsonObject1.getString("fx"));
dayWeatherInfo.setFengli(jsonObject1.getString("fl"));
dayWeatherInfo.setHigh(jsonObject1.getString("high"));
dayWeatherInfo.setLow(jsonObject1.getString("low"));
dayWeatherInfo.setType(jsonObject1.getString("type"));
dayWeatherInfo.setDate(jsonObject1.getString("date"));
weatherInfo.setYesterday(dayWeatherInfo);
returnweatherInfo;
}catch(Exceptione){
e.printStackTrace();
Log.e(e.toString(),"获取Json数据失败");
returnnull;}}}
3.4详细设计
3.4.1项目设计内容
该项目的主要设计内容是将未来一段时间的天气信息表现出来。
使用开发工具eclipse开发设计天气预报的各个界面的显示,以及将从中国天气网上获取的数据显示在界面上。
3.4.1项目设计目标
(1)理解与熟悉Android开发过程中APP的运行与显示。
(2)运用webserver来实现天气预报APP的数据的接收。
(3)利用fragment来显示各个界面的切换。
(4)利用SQLite来存储用户信息及城市选择配置文件。
该项目是在Android系统通用的开发工具eclipse商开发实现的,采用中国天气网提供的数据,会建立一个天气预报中所需要所以信息的一个信息库,从中获取数据,从而实现在项目上数据的呈现。
3.4.1程序流程图
该项目利用Android系统的开源性,使用系统的各种接口,获取系统权限,达到项目需要实现的功能。
在项目设计过程中,利用Android系统的四大组件,来完成整个项目的设计与实现。
程序流程图如图3
图3程序流程图
4系统实现
4.1软件界面设计
因为此项目是在手机上使用,且手机终端的屏幕相对较小,因此可以放置的功能菜单就会有限。
而且伴随谷歌对Android系统的不断更新与完善,菜单键也慢慢的取消,所以在本项目中没有菜单键。
但是谷歌公司为了人们可以简单操作手机,设计了不同响应点击事件的反应结果。
故替代了老版系统的菜单键。
在此软件中,采用直观明了的显示方向,主界面直接显示了天气的所有相关信息。
所以菜单键在这个项目中就显得不是那么重要。
4.2天气信息显示模块
天气预报的主要需要实现的就是天气信息的显示,使人们得知接下来的日子的天气信息。
因此在本项目中,天气信息显示模块是最为重要的一步,也是最为艰难的一步。
在天气信息显示模块中,应用了设计此项目中的所有技术。
天气信息的各个数据显示布局运用到了Android中四大组件之一的Activity。
Activity如图4
所示。
图4Activity
一个activity就相当于手机的一个屏,在这个可视的界面上,它能够获得焦点,用户都会在它上面进行一些必要的操作。
所以,天气相关的所有信息就会在一个activity上呈现出来,且所有功能方面的按钮也会在这个activity上面进行呈现。
在这个项目中,利用安卓开发提供的API进行信息的显示,经过调用setContentView(View)这个API在Activity上放入所需要显示的界面因素。
Activity在被使用者用来作为一个屏来呈现不同的内容以外,还有其他的作用:
(1)它可以作为一个悬空的窗口,通过改变theme属性windowIsFloatting来实现;
(2)承载其他的Activity,使显示效果看起来炫酷,这个效果需要使用ActivityGrou这个方法来实现的;
(3)也可以利用activity与fragment之间的联系,来完成显示。
在此项目中就采用了activity与fragment的结合,通过滑动显示不同城市的天气信息。
但activity要变成可视化,让用户可以操作这么一个情况时,就必须在创建工程时生成的AndroidManifest.xml这个设置文件中申明,否则在执行代码时程序将不会去读取也不会运行Activity。
所以新增加一个activity就需要配置。
经过以上简诉,完成了天气预报APP的主界面设计与实现。
主界面显示如图5所示
图5主界面
4.3城市管理显示模块
点击项目的左上角设置按钮,会看到新的一个Activity,再点击城市管理,会进入城市管理这个界面,城市管理图如图6所示
图6城市管理
城市管理模块中采用了一项Android中必不可少的技术,且这项技术在现阶段出现的所有的手机APP中都会用到。
那就是listview。
在每个activity显示中,需要有许多格式一样的属性或者数据,所以listview就满足了这一需求。
Listview绘制步骤:
1.先需要有ListView中item要呈现出来的天气信息;
2.在是利用list数组来存储数据
3.编写适配器,简单的说,适配器就是Item的集合list,list集合有多少因素就产生多少个Item,需要呈现几条天气信息会生成几行。
4.将适配器和ListView相配置联系,并显示出来。
在项目中,采用以上步骤完成了城市管理这个模块的数据显示。
数据显示代码:
privateString[]getCitys(){
publicstaticfinalStringMODE_PRIVATE=l;
privateSharedPreferencess;
s=getSharedPreferences("userInfo",Context.l);
Stringcitys=s.getString("savedCityNames",null);
if(citys!
=null){
returncitys.split("##");
}else{
returnnewString[]{"太原","昆山","吕梁","阳泉","大同","霞浦","杭州"};}}
适配器代码:
publicclassViewPagerAdapterextendsPagerAdapter{
privateList<View>vs;
publicintgainCt(){if(views==null){
return0;}returnvs.size();}
publicObjectinstantiateItem(ViewGroupc,intp){
Viewv=vs.get(p);
((ViewPager)c)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 天气预报 设计 实现