天气预报开发文档

合集下载

j2me 实验四 http 天气预报 稳定性增强,请下载j2me实验四.txt,复制里面代码覆盖本文档内相应代码

j2me 实验四   http  天气预报    稳定性增强,请下载j2me实验四.txt,复制里面代码覆盖本文档内相应代码

淮海工学院计算机工程学院实验报告书课程名:《手持设备软件开发》题目:实验4:J2ME网络程序设计班级:学号:姓名:statue评语:成绩:指导教师:批阅时间:年月日一、实验目的与要求掌握MIDP网络程序设计的一般方法。

能够使用GCF中的类和接口及多线程进行网络客户端应用程序的开发,掌握基于HTTP编程的方法,能够处理GET与POST请求。

理解MIDlet推注册及响应网络连接的步骤及方法。

二、实验内容使用Google Weather API开发一个可以显示连云港天气预报的J2ME网络程序。

具体的方法是请求网址:/ig/api?weather=lianyungang&hl=zh-cn然后处理响应返回的XML文档。

样例文档如下:<xml_api_reply version="1"><weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1"row="0" section="0"><forecast_information><city data="Lianyungang, Jiangsu" /><postal_code data="lianyungang" /><latitude_e6 data="" /><longitude_e6 data="" /><forecast_date data="2010-06-03" /><current_date_time data="2010-06-03 11:00:00 +0000" /><unit_system data="SI" /></forecast_information><current_conditions><condition data="雨" /><temp_f data="58" /><temp_c data="14" /><humidity data="湿度:89%" /><icon data="/ig/images/weather/cn_heavyrain.gif" /><wind_condition data="风向:米/秒" /></current_conditions><forecast_conditions><day_of_week data="周五" /><low data="14" /><high data="23" /><icon data="/ig/images/weather/sunny.gif" /><condition data="晴" /></forecast_conditions>……</weather></xml_api_reply>三、实验步骤import javax.microedition.midlet.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import java.io.*;import java.util.Vector;public class pro4 extends MIDlet implements CommandListener{public static final String RESPONSE_HEADER_CONTENT_LENGTH = "Content-Length";public static final String RESPONSE_HEADER_CONTENT_TYPE = "Content-Type";private Display display;private TextBox tbxMain;private Command cmdExit;private Command cmdDisplay;private String msg="";String url="/ig/api?weather=lianyungang&hl=zh-cn";public pro4(){display=Display.getDisplay(this);cmdExit=new Command("Exit",Command.SCREEN,1);cmdDisplay=new Command("刷新",Command.ITEM,2);getWeather();tbxMain=new TextBox("天气预报",msg,2000,0);tbxMain.addCommand(cmdExit);tbxMain.addCommand(cmdDisplay);tbxMain.setCommandListener(this);}//建立连接public void getWeather(){HttpConnection conn=null;try{conn=(HttpConnection)Connector.open(url,Connector.READ);conn.setRequestMethod(HttpConnection.POST);conn.setRequestProperty("User_agent","Profile/MIDP-2.0 Configuration/CLDC-1.1");}catch(IOException ioe){System.out.println(ioe);}try{DataInputStream sIs = conn.openDataInputStream();String outString=getResponseData(conn,sIs);System.out.println(outString);msg=outString;msg=division(msg);}catch(IOException io){System.out.print(io);}}//分割提取字符串public String division(String str){String out="";int cityStrStart=str.indexOf("city data=")+"city data=".length()+1;int cityStrEnd=str.indexOf("/><postal_code")-1;out=out+"城市:"+str.substring(cityStrStart,cityStrEnd)+'\n';int dateStrStart=str.indexOf("orecast_date data=")+"orecast_date data=".length()+1;int dateStrEnd=str.indexOf("/><current_date")-1;out=out+"日期:"+str.substring(dateStrStart,dateStrEnd)+'\n';int wetStrStart=str.indexOf("湿度:")+"湿度:".length();int wetStrEnd=str.indexOf("/><icon data=")-1;out=out+"湿度:"+str.substring(wetStrStart,wetStrEnd)+'\n';if( str.regionMatches( true,str.indexOf("gif\"/><wind_condition data=")+1 ,"风向" ,0 ,"风向".length() ) ){int windStrStart=str.indexOf("风向:")+"风向:".length();int windStrEnd=str.indexOf("/></current_conditions>")-1;out=out+"风向:"+str.substring(windStrStart,windStrEnd)+'\n';}//第一天int week1StrStart=str.indexOf("day_of_week data=")+"day_of_week data=".length()+1;int week1StrEnd=str.indexOf("/><low data=")-1;out=out+str.substring(week1StrStart,week1StrEnd)+'\n';int low1StrStart=str.indexOf("low data=")+"low data=".length()+1;int low1StrEnd=str.indexOf("/><high data=")-1;out=out+"最低温度:"+str.substring(low1StrStart,low1StrEnd);int high1StrStart=str.indexOf("/><high data=")+"/><highdata=".length()+1;int high1StrEnd=str.indexOf("/><icon data=\"/ig")-1;out=out+"最高温度:"+str.substring(high1StrStart,high1StrEnd);int condition1StrStart=str.indexOf("gif\"/><conditiondata=")+"gif\"/><condition data=".length()+1;int condition1StrEnd=str.indexOf("/></forecast_conditions")-1;out=out+"总体概况:"+str.substring(condition1StrStart,condition1StrEnd)+'\n';//第二天int week2StrStart=str.indexOf("day_of_weekdata=",condition1StrEnd+5)+"day_of_week data=".length()+1;int week2StrEnd=str.indexOf("/><low data=",condition1StrEnd+5)-1; out=out+str.substring(week2StrStart,week2StrEnd)+'\n';int low2StrStart=str.indexOf("low data=",condition1StrEnd+5)+"low data=".length()+1;int low2StrEnd=str.indexOf("/><high data=",condition1StrEnd+5)-1;out=out+"最低温度:"+str.substring(low2StrStart,low2StrEnd);int high2StrStart=str.indexOf("/><highdata=",condition1StrEnd+5)+"/><high data=".length()+1;int high2StrEnd=str.indexOf("/><icon data=\"/ig",condition1StrEnd+5)-1;out=out+"最高温度:"+str.substring(high2StrStart,high2StrEnd);int condition2StrStart=str.indexOf("gif\"/><conditiondata=",condition1StrEnd+5)+"gif\"/><condition data=".length()+1;intcondition2StrEnd=str.indexOf("/></forecast_conditions",condition1StrEnd+5)-1;out=out+"总体概况:"+str.substring(condition2StrStart,condition2StrEnd)+'\n';//第三天int week3StrStart=str.indexOf("day_of_weekdata=",condition2StrEnd+5)+"day_of_week data=".length()+1;int week3StrEnd=str.indexOf("/><low data=",condition2StrEnd+5)-1;out=out+str.substring(week3StrStart,week3StrEnd)+'\n';int low3StrStart=str.indexOf("low data=",condition2StrEnd+5)+"lowdata=".length()+1;int low3StrEnd=str.indexOf("/><high data=",condition2StrEnd+5)-1;out=out+"最低温度:"+str.substring(low3StrStart,low3StrEnd);int high3StrStart=str.indexOf("/><highdata=",condition2StrEnd+5)+"/><high data=".length()+1;int high3StrEnd=str.indexOf("/><icon data=\"/ig",condition2StrEnd+5)-1;out=out+"最高温度:"+str.substring(high3StrStart,high3StrEnd);int condition3StrStart=str.indexOf("gif\"/><conditiondata=",condition2StrEnd+5)+"gif\"/><condition data=".length()+1;intcondition3StrEnd=str.indexOf("/></forecast_conditions",condition2StrEnd+5)-1;out=out+"总体概况:"+str.substring(condition3StrStart,condition3StrEnd)+'\n';//第四天int week4StrStart=str.indexOf("day_of_weekdata=",condition3StrEnd+5)+"day_of_week data=".length()+1;int week4StrEnd=str.indexOf("/><low data=",condition3StrEnd+5)-1;out=out+str.substring(week4StrStart,week4StrEnd)+'\n';int low4StrStart=str.indexOf("low data=",condition3StrEnd+5)+"lowdata=".length()+1;int low4StrEnd=str.indexOf("/><high data=",condition3StrEnd+5)-1;out=out+"最低温度:"+str.substring(low4StrStart,low4StrEnd);int high4StrStart=str.indexOf("/><highdata=",condition3StrEnd+5)+"/><high data=".length()+1;int high4StrEnd=str.indexOf("/><icon data=\"/ig",condition3StrEnd+5)-1;out=out+"最高温度:"+str.substring(high4StrStart,high4StrEnd);int condition4StrStart=str.indexOf("gif\"/><conditiondata=",condition3StrEnd+5)+"gif\"/><condition data=".length()+1;intcondition4StrEnd=str.indexOf("/></forecast_conditions",condition3StrEnd+5)-1;out=out+"总体概况:"+str.substring(condition4StrStart,condition4StrEnd)+'\n';return out;}//获取内容public String getResponseData(HttpConnection aConn, DataInputStream sIs) { boolean isWap = true;byte[] sData = null;String sType = null;int sLen = 0;try {sType = aConn.getHeaderField(RESPONSE_HEADER_CONTENT_TYPE);sLen = Integer.parseInt(getResponseHeaderProperty(aConn, RESPONSE_HEADER_CONTENT_LENGTH));} catch (IOException ex) {System.err.print(ex.toString());} catch (Exception ex) {System.err.print(ex.toString());sLen = 0;}if (sLen > 0) {int sActual = 0; //每一次实际读取的字节数int sBytesread = 0; //总读取的字节数sData = new byte[sLen];while ((sBytesread != sLen) && (sActual != -1)) {try {sActual = sIs.read(sData, sBytesread, sLen - sBytesread); sBytesread += sActual;} catch (Exception ex) {System.err.print(ex.toString());return null;}}} else {int sCh = 0;Vector sVbuffer = new Vector();try {while ((sCh = sIs.read()) != -1) {sVbuffer.addElement(new Integer(sCh));}} catch (Exception ex) {System.err.print(ex.toString());return null;}sLen = sVbuffer.size();sData = new byte[sLen];for (int i = 0; i < sLen; i++) {sData[i] = ((Integer) sVbuffer.elementAt(i)).byteValue();}}String sResult = new String(sData);isWap = false;return sResult;}public String getResponseHeaderProperty(HttpConnection aConn, String aKey) {return aConn.getRequestProperty(aKey);}public void startApp(){display.setCurrent(tbxMain);}public void pauseApp(){}public void destroyApp(boolean unconditional){}public void commandAction(Command c,Displayable s){if(c==cmdExit){destroyApp(false);notifyDestroyed();}if(c==cmdDisplay){getWeather();tbxMain.setString(msg);System.out.println("msg"+msg);}}}四、实验结果五、结果分析与实验体会本次实验可以分为三个部分:建立连接,取出字符串,提取字符串。

微信小程序天气预报开发实例代码源码

微信小程序天气预报开发实例代码源码

微信⼩程序天⽓预报开发实例代码源码微信⼩程序天⽓预报实例主要功能1. ⾃动定位所在城市2. 根据所定位的城市获取天⽓信息3. 显⽰未来⼏天的天⽓情况4. 查看当天天⽓的详情信息先看效果图微信⼩程序-天⽓⾸页微信⼩程序-天⽓详情页思路及编码部份⾃动定位所在城市wx.getLocation:通过官⽅⽂档的API中可以看到wx.getLocation可以获取到当前的地理位置和速度,不过获取到的地理位置只是经纬度,⽽不是真正的城市名称,但我们可以根据这个经纬度来获取城市名称等信息(需要⽤到第三⽅接⼝),再通过城市名称和城市ID获取对应的天⽓信息。

在.js逻辑层增加函数:data:{weatherApikey:'', //天⽓apikey,在 上申请city:'', //城市名称areaid:'', //城市对应的idcurWd:{}, //当天天⽓情况indexs:{}, //当天天⽓详情说明forecast:{} //未来4天的天⽓情况},onLoad:function(options){// ⽣命周期函数--监听页⾯加载this.setData({weatherApikey:getApp().globalData.weatherApikey});this.loadLocation();},//获取当前的位置信息,即经纬度loadLocation: function() {var page = this;wx.getLocation({type: 'gcj02', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可⽤于 wx.openLocation 的坐标success: function(res){// successvar latitude = titude;var longitude = res.longitude;//获取城市page.loadCity(latitude, longitude);}})},//通过经纬度获取城市loadCity: function(latitude, longitude) {var page = this;//这个key是⾃⼰在上申请的var key = "XSWBZ-EVQ3V-UMLPA-U4TP6-6MQFZ-UUFSL";var url = "/ws/geocoder/v1/?location="+latitude+","+longitude+"&key="+key+"&get_poi=1";wx.request({url: url,data: {},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT// header: {}, // 设置请求的 headersuccess: function(res){// successvar city = res.data.result.address_component.city;city = city.replace("市", ""); //将“市”去掉,要不然取不了天⽓信息page.setData({city: city});page.loadId(city);}})},//通过城市名称获取城市的唯⼀IDloadId: function(city) {var page = this;var url = "/apistore/weatherservice/citylist";wx.request({url: url,data: {cityname: city},header: {apikey:page.data.weatherApikey},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTsuccess: function(res){// successvar cityid = res.data.retData[0].area_id;page.setData({areaid: cityid});page.loadWeather(city, cityid);}})},//通过城市名称和城市ID获取天⽓情况loadWeather: function(city, areaId) {var page = this;var url = "/apistore/weatherservice/recentweathers";wx.request({url: url,data: {cityname:city,cityid: areaId},header: {apikey: page.data.weatherApikey},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTsuccess: function(res){// successpage.setData({curWd : res.data.retData.today, indexs: res.data.retData.today.index, forecast:res.data.retData.forecast});}})},//事件绑定,跳转到天⽓详情页⾯gotoDetail: function(event) {// console.log(this.data.areaid+"==在这⾥跳转=="+this.data.city);wx.navigateTo({url: '../detail/detail?city='+this.data.city+"&cityid="+this.data.areaid})}注意:page.setData或this.setData都是⽤来设置data中的数据值的。

文档:天气预报的方法

文档:天气预报的方法

天气预报的3种方法(一)天气预报的内容和时效目前天气预报包括天气形势预报和气象要素预报两部分,前者对天气系统(高压、低压、槽脊、锋面等等)的移动、强度变化和生成、消亡的预报;后者是对气温、气压、湿度、能见度、风、云江水等等气象要素和天气现象的预报。

两者密其相关,天气形势是预报气象要素的基本依据。

预报时效包括短时预报、短期预报、中期预报和长期预报。

通常称时效在几个小时内的预报为短时预报,时效1~3天的预报为短期预报,时效为3~10天的预报为中期预报,时效10天以上的月、季年预报为长期预报,也有人把一年以上的预报成为超长期预报。

时效越短的预报,要求预报的越准确。

(二)天气预报方法目前气象台使用的天气预报方法,大体分为三类,即天气图法、数值预报法和数理预报法等。

天气图法和数值预报法主要用于短期预报,近年来也在向中期预报方向延伸。

数理统计预报法主要用于长期预报,近年来也向短期预报方面发展。

在实际预报工作中三种方法是相互结合、相互补充使用的。

1.天气图预报法天气图预报法是出现最早的一种天气预报方法,目前仍然是大多数气象台采用的主要的方法。

天气图法是以天气图为基本工具的预报方法。

它从同一时刻的各层天气图上分析出天气系统及其结构和天气状况,又从前后连贯的几个时刻天气图上判断出这些天气系统的生成、移动、发展、消亡等等变化,以及各个天气系统之间的相互关系。

根据这些分析,应用天气动力学原理来预测各个天气系统的未来演变,作出天气形势预报。

再依据天气形势的可能演变趋势作出温度、气压、风、云、降水等等气象要素和天气现象的预报。

在天气预报过程中除了遵循天气学的分析原则以外,还与预报员的实践经验有很大关系。

因而天气图预报法带有一定的主观成分,预报的精确度受到一定的限制,它属于半经验性的预报。

在实际工作中经常使用的方法,一般是经验方法,如外推法、引导气流法及历史资料的应用等。

(1)外推法。

天气形势的发展一般都在一定时间内具有一定的持续性。

Android天气预报系统文档

Android天气预报系统文档

[键入公司名称]实训课程设计天气预报程序xx2011/12/291项目任务概述1.1项目背景随着3G时代的到来,移动互联网成为Internet下一个热点,android可以很好的使用Internet,获取网站上的数据,android天气预报系统就利用这一方式为用户提供服务。

天气预报的主要功能是为用户提供今日以及未来两天的天气预报。

1.2 项目任务本项目实现在 Android移动设备天气预报功能,系统根据用户输入的地址,在Internet上请求获得该地址的天气情况,并发回数据,在系统调用该数据后,将天气实况显示给用户。

2需求分析用户可以使用该系统实现日记的编写,修改和删除,日记内容阅读以及以文本文档形式将日记导入SDcard中。

2.1总体用例图查看当日天气预报查看未来两天天气预报查看地理信息图12.2 天气预报用例图查看当日天气预报2.3天气预报业务流程输入地址选择列表item进入系统进入今日预报页面退出系统图2用户通过点击桌面图标,进入系统。

再通过在文本框中输入的地址,来进入当天天气预报界面。

再点击箭头按钮,页面跳转到未来两天天气预报的界面。

2.4 查看未来两天天气预报用例图2.5 查看未来两天天气预报流程图图22.6 查看地理信息用例图查看未来两天天气预报输入地址选择列表item点击按钮进入系统进入今日预报页面进入明日预报界面退出系统2.7查看地理信息流程图图33 系统设计3.1 天气预报系统UI——登录界面查看地理信息点击MENU 选择MENU 查看地理信息回到系统图43.2天气预报UI——登录界面说明在此界面中,正如大家所见。

含有两个TextView组件,一个ImageView组件,一个AutoCompleteTextView,其字符大小分别是默认的大小。

其中AutoCompleteTextView能够给用户提供选项列表,用户只要单击列表中的一项,此页面就回自动跳转到下一页面。

3.3 天气预报UI——今日天气预报界面图5 图63.4天气预报UI——今日天气预报界面说明此界面中分别含有六个TextView组件,五个ImageView组件,一个ImageButton 组件,一个Menu,在此布局文件中有五个相对布局。

未来十天天气预报

未来十天天气预报

未来十天天气预报这篇文档将为您提供未来十天的天气预报。

为了方便阅读,将按照日期的先后顺序进行展示。

Day 1:日期:今天天气状况:晴朗气温:25°C - 32°C降雨概率:10%今天是个晴朗的日子,温度适宜,最高气温预计将达到32°C,夜晚的气温将下降到25°C左右。

降雨概率很低,大家可以安心地外出活动。

Day 2:日期:明天天气状况:多云气温:24°C - 31°C降雨概率:20%明天将有些多云,不过气温依然温暖,最高气温预计在31°C左右,夜晚的气温将下降到24°C。

有20%的降雨概率,建议携带雨具。

Day 3:日期:后天天气状况:阴天气温:23°C - 29°C降雨概率:40%后天将会是一个阴天,气温稍低,最高气温预计在29°C左右,夜晚的气温将下降到23°C。

降雨概率为40%,记得带上雨具应对可能的降雨。

Day 4-6:日期:第四天至第六天天气状况:多云转晴气温:22°C - 28°C降雨概率:10%这三天的天气转换起伏较大。

第四天将有些多云,气温在28°C左右,夜晚的气温将下降到22°C。

第五天和第六天将转为晴朗天气,气温分别为27°C和26°C左右。

这三天的降雨概率均为10%。

Day 7-9:日期:第七天至第九天天气状况:晴朗气温:26°C - 33°C降雨概率:5%这三天将是一个晴朗炎热的时候。

最高气温将达到33°C,夜晚的气温在26°C左右。

降雨概率极低,只有5%。

建议外出时做好防晒措施,并随身携带水分。

Day 10:日期:第十天天气状况:多云转阴天气温:25°C - 30°C降雨概率:30%在这个十天预报的最后一天,天气将转为多云,最高气温约为30°C,夜晚的气温将下降到25°C左右。

天气预报

天气预报
天气预报
华北北部、东北地区未来几天天气如何变化?
气团: 水平方向上温度和湿度等物理性质 比较均一的大范围的空气块
暖气团 比下垫面温度高的气团
分类
冷气团 比下垫面温度低的气团
单一气团控制,天气晴朗
锋面系统
冷气团
地平面
暖气团
①冷暖气团的交界面叫锋面,亦称锋区。 ②一般是冷气团在锋面下面,暖气团在锋面上面。 ③锋面附近常伴有云、雨、大风等天气
2.下列图示四地,在其他条件相同的情况下,表示气温 最高、气压最低、天气晴朗的是( D )
我国的古代诗歌中有不少作品蕴含着丰富的地理 信息,有些与天气系统有关,据此回答以下问题
9.“黑云翻墨未遮山,白雨跳珠乱入船。卷地风来忽吹散, 望湖楼下水如天。”此诗中所描述的天气现象与哪种天气 系统有关? ( A ) A.冷锋 B.暖锋 C. 准静止锋 D. 反气旋 10.“黄梅时节家家雨,青草池塘处处蛙。”诗句中所描述的 是影响我国东部地区另一性质的锋面,该锋影响下的天气 特征是 ( C ) A. 降水时间短 B. 降水强度很大 C. 持续阴雨天气 D.影响范围很小
3.右图甲地位于低压中心,读图回答: 图中四点中,受冷气团控制的是 (B ) A.①③ B. ②④ C. ①④ D. ②③
4、某地出现云层加厚,接着形成连续性降水, 两天后雨过天晴,气温上升,气压下降,该地是: A、慢行冷锋过境 B、快行冷锋过境 C 、暖锋过境 D、受准静止锋影响 C 、暖锋过境
5、夏初,我国长江中下游地区梅雨天气的形成, 主要是受: A、冷锋过境的影响 B、暖锋的影响 C D、西风的影响 C、准静止锋的影响 、准静止锋的影响 6、某一天气系统过境时,引起狂风暴雨,气温 剧降,它是: A、台风 B、慢行冷锋 C、快行冷锋 D、准静止锋

(完整版)基于Android平台的天气预报系统的设计与开发毕业论文

(完整版)基于Android平台的天气预报系统的设计与开发毕业论文

基于Android平台的天气预报系统的设计与开发摘要:安卓是谷歌于2008年推出的一个智能手机操作系统,其独特的设计模式使得开发手机软件变得非常简单。

该论文介绍了一款安卓天气预报的设计与实现过程。

用户可以通过主界面选择城市来获得包括风力、风向、紫外线强度等的天气信息。

基于手机的天气预报系统能够使用户对于各地的天气情况实时掌握,方便用户的出行和行程安排,具有一定的实用性。

关键字:实时预报,Android,温度检测,定位The Design and Development of Weather Forecast System based on theAndroid SystemAbstract: Android is a Smartphone system launched by Google in 2008, whose unique design pattern makes it easier to develop mobile phone softwares . The paper introduces the process of the design and implementation of a Android weather forecast system. Users can choose a city what he likes from the home screen to get access to the weather information ,including wind,wind direction,strong of ultraviolet light and so on.Weather forecast system based on mobile phone enables users to takethe real-time control of weather conditions of all parts,thus bringing great convenience to the user's travel and travel arrangements, and has a certain practicalityKeywords: real-time forecast, Android , Temperature detection , location毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。

手机安卓开发设计报告-天气预报APP

手机安卓开发设计报告-天气预报APP

一、需求分析(一)引言1.编写目的1.1 为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城市位置,以及用图标表示各城市对应的气象信息,可以简洁的表示出“晴、雨、雪”和“气温”气象信息。

2. 项目风险2.1 (项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出这些风险究竟有哪些基本特征、可能会影响到项目的那些方面。

)2.2 联网收费视用户电话运营商的收费标准决定2.3 手机或者无线信号不好时,可能无法连接或更新天气情况3. 预期读者和阅读建议3.1 预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的用户3.2 阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项以及可能存在的风险4. 产品范围2.2手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领域(二)综合描述1.产品的状况1.1 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。

目前未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。

Android操作系统最初由Andy Rubin开发,最初主要支持手机。

2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他数码领域上。

我们开发的相关项目正是一个在安卓平台上开发的软件,可以用这个软件来实现用户在一些简单的手持设备如手机或者平板电脑等上面及时的了解到用户所在城市的天气预报。

2. 产品的功能2.1 天气信息获取2.2 天气信息显示3. 系统配置功能3.1 用户类和特性安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。

熟悉安卓平台用户还可以选择对相关软件的系统按自己的喜好进行配置并保留自己的个性化系统配置。

安卓软件开发者:安卓软件开发者(喜好者)可以通过相关的开源代码来了解软件运行的原理。

3.2 运行环境软件需要在支持安卓系统的可移动设备中正确安装才能正常运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安卓天气预报APP学校:武汉理工大学学院:计算机科学与技术学院姓名:张宁摘要:科技的进步会给人们的生活带来方便和快捷,随着科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。

因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。

Android作为当前最流行的操作平台,自然也存在着大量的应用服务需求。

本课题研究的是基于Android平台下的天气软件,目的是帮助用户随时随地查询天气信息及天气变化情况,让生活更加舒适方便。

本文详细讲述了Android平台下天气软件的界面设计及异常处理部分,主要包括界面的实现、控件的使用、界面的布局和异常的处理等内容,结合中国气象网的天气数据,将准确的天气情况以友好的方式呈现给用户,使用户可以更加赏心悦目地体验本软件的服务。

目录第一章绪论1.1研究背景1.2研究意义1.3研究内容第二章系统分析2.1研究目标2.2需求分析2.3性能分析第三章程序设计与实现3.1用户界面的实现3.2获取和解析数据3.3在UI上呈现天气信息第4章系统测试第5章结论5.1总结与改进5.1参考文献第一章绪论1.1研究背景随着科技的发展,Android在中国的前景十分广阔,它的社区也十分红火,而这些社区为Android在中国市场的普及做了很好的推广作用。

国内厂商和许多大运营商也纷纷加入了Android的阵营,同时不仅仅是局限于手机上,国内的厂家也不断的推出了Android系统的产品。

Android的主要竞争对手有苹果的IOS以及RIM的Blackberry OS。

在2011年的第一季度中,Android在全球的市场份额首次超过了塞班系统,跃居全球第一。

于次年的2月份,Android占据全球智能手机操作系统市场的52.5%,而在中国的市场占有率为68.4%,在美国的手机市场上占有率达到了47.3%。

到同年的二月下旬,Google公司正式宣布,Android设备每天激活量高达85万台。

Google的官方数据表明,Android在电子市场上的应用程序数量已经突破45万。

相信在不久的将来,会有越来越多的用户选择Android系统的手机。

Android系统是以Linux为核心的手机操作平台,并且它是作为一款开放式的、可扩展的操作系统。

随着Android的快速发展,如今它已经允许开发者使用多种编程语言来编写Android的应用程序,而不再是像以前一样,只能使用Java语言来开发Android应用程序。

因此,它受到了许许多多的开发者的欢迎,成为了真正意义上的开放式操作系统。

1.2研究意义天气预报是一种具有实用的信息服务,伴随着智能手机的不断普及和应用,各种智能手机平台下都有不同的天气预报软件。

Android作为现在主流的智能手机之一,自然也有这方面的软件。

天气状况常常关系到人们的日常生活,比如它能告知温暖,提供方便出行等等。

此外,它对未来天气的预测还可以帮助农民对农作物的浇灌、施肥、收割等一系列的工作指导,以便让他们提前做出防御措施,?把气象灾害带来的损失降到最低程度,并且能使得广大公众在第一时间方便、快捷地获取最新的天气预报信息。

同时它也可以强化天气公共服务的职能,改善公共服务手段、完善公共服务体系、提高公共服务质量,更好地发挥了气象事业对社会发展的现实性作用。

? 这款手机天气预报系统给人们生活带来方便的全方位信息,是人们在日常生活中必不可少的生活用品。

此天气预报软件的界面明了,操作简单,适合各类人士,对提高人们生活水平具有?一定的促进作用。

1.3研究内容Android平台的天气预报系统是基于Android手机平台,利用Java语言,从Google上获取天气预报的信?息,开发出对使用Android平台的手机天气预报系统的一款应用软件。

? 为了让智能手机用户能够随时随地查询互联网所提供的服务,让手机能通过互联网访?问Web?网站并处理各项不同的业务,其中有一种非常高效的方法就是将应用系统的功能拓展到手机的客户端。

Android?的一个最大特点就是它的开放性架构体系,它不仅仅具有非常好的调试环境和开发环境,而且它还具有各种各样的可扩展功能,其中还包括丰富的多媒体功能和图形组件的强大浏览器,而且其技术已经逐渐趋于成熟。

通过对界面的布局和控件使用等相关知识的学习和应用,使我对Android平台下的开发工作有了一个初步的了解,并且经过这次的开发,它使我能够基本掌握这些重要内容。

软件开发以后,它能够帮助用户随时搜索由中国气象局提供的全国范围内的城市的天气信息,并且把数据显示在一个界面美观、布局合理窗口内,使用户能够舒适的享受此软件带来的简便的服务。

第2章系统分析2.1研究目标1.要了解和认识Android应用程序的开发和设计过程;?2.运?用Web Service来实现Android?平台的手机天气预报系统的设计。

? 此软件是基于Eclipse的开发环境下,利用Google天气的气象数据建立起天气预报信息数据库,?从而开发出了针对于Android平台的手机天气预报软件。

2.2需求分析在当代社会中,手机已经发展成为广大人们群众的日常生活中必不可少的通讯工具,?而且,手机的功能也逐渐趋于完善。

手机用户可以选择开通GPRS网络服务,这种服务的方便和快捷,使人们对于手机上网的需求得到了保证,从而带动了手机软件的发展,并且让我国的移动通讯功能也得到了大大的提高。

越来越多的手机软件被用在手机上,弥补和完善了原始系统的不足。

随着科技的发展,现在手机的功能越来越多,也越来越强大,再也不像以前那么死板、简单。

此软件是在现有手机的基础上,通过网络查询实现天气状况的报告和未来天气的预报等功能,让人们的出行和生活得到方便和保证。

此软件是一个利用中国气象网来获取天气的应用程序,启动程序后可以进行城市之间的选择的设置,并且可以通过图片、文字来显示当前和未来几天的天气情况,其中包括温度、湿度、风向和雨雪等情况。

这些天气的数据是通过后台服务获取的,并从网上上获取天气的相关信息,将天气的信息保存在数据库中,方便用户的更新和查看。

2.3性能分析1.点击Weather.apk安装;2进入主界面后,看到的是默认的城市和它的天气情况;3点击右上角的“城”按钮,进行其他城市的选择,点击保存即可获得该城市的天气预报信息;? 此软件操作十分简单,设计的比较人性化,应用也很方便,安全性能较高、程序的响应速度也很快、信息处理速度快。

第3章程序设计与实现3.1用户界面的实现Android提供的UI开发模块是基于XML文件的,这些XML 文件放在res/layout下面。

此目录可包含所有应用程序的非代码部分,比如图片、xml文件等。

如果要使用这些资源,在代码目录下打开R.java文件即可。

在xml中编写界面代码,实现的时候方便和灵活。

在Android程序设计中要用到一些基本的UI元素,通过运用Views、ViewGroups和layout可为Activity创建直观的UI。

通常用Android SDK中的一些控件,并用ViewGroups去组合Views,实现数据的显示。

在一个Android的应用中,用户界面由View和ViewGroup对象构建。

View对象是Android平台中用户界面的基本单元。

View类是widgets(工具)类的父类,它们提供了如文本输入框和按钮之类的UI。

VieGroup类是Layout(布局)类的父类,它们提供了如表格布局和布局的架构等。

View是一个数据体,它存储了屏幕上一个区域的布局参数和内容,并负责它所管辖的区域中的测量、卷动和按键手势的处理。

为了创建Android平台的用户界面,首先要在PackageExplorer中展开layout后新建即可。

XML文件用来对窗口进行布局,主要有系统运行的配置文件有main.xml和result.xml。

Layout是一类ViewGroup控件,它本身没有内容,存在的唯一原因就是其中的结构能放好它的子控件。

比如,Linearlayout可以将子控件按水平或垂直方向排列;Tablelayout可以将子控件按表格形式依次放好。

所以,有了Layout,控件和控件之间不再是分裂开的。

其主要代码是:<ScrollViewxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:scrollbars="vertical"android:fadingEdge="vertical"android:background="@drawable/back1"><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:scrollbars="vertical"android:fadingEdge="vertical"><TableLayout android:id="@+id/table"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/weatherbg"><TableRowandroid:layout_width="fill_parent"android:layout_height="wrap_content"><LinearLayout android:layout_width="wrap_content"android:layout_height="fill_parent"android:gravity="center"android:orientation="vertical"><TextView android:id="@+id/cityname"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textStyle="bold"android:textColor="#2F4F4F"android:paddingLeft="25dp"android:layout_gravity="center"android:textSize="28dp"android:text="未知"/><TextView android:id="@+id/tempe"android:layout_width="fill_parent"android:layout_height="wrap_content"android:paddingLeft="40dp"android:textColor="#FF8C00"android:textSize="10dp"android:text=""/></LinearLayout><ImageViewandroid:id="@+id/icon"android:layout_width="100dp"android:layout_height="50dp"android:layout_gravity="center"/></TableRow><TableRowandroid:layout_width="fill_parent"android:layout_height="wrap_content"><LinearLayout android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="30dp"android:gravity="center"android:orientation="vertical"><TextView android:id="@+id/tdate"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="14dp"android:textColor="#E0FFFF"android:text="时间:2012年12月12日"/><TextView android:id="@+id/tweek"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="right"android:textColor="#E0FFFF"android:textSize="12dp"android:text="星期:星期三"/></LinearLayout><TextView android:id="@+id/weather"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textColor="#FAFAD2"android:gravity="bottom"android:textSize="18dp"android:text="晴"/></TableRow></TableLayout><LinearLayout android:layout_toRightOf="@id/table"android:paddingTop="40dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><Button android:id="@+id/setcity"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/button_place"android:visibility="gone"/><Button android:id="@+id/refresh"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/button_fresh"/></LinearLayout><LinearLayout android:id="@+id/clothes"android:layout_width="wrap_content"android:layout_below="@id/table"android:layout_height="wrap_content"android:gravity="center"android:orientation="horizontal"><ImageViewandroid:id="@+id/clothesicon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/clothes"android:layout_gravity="top"/><TextView android:id="@+id/clothesvalue"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#FF8C00"android:textSize="16dp"android:text="穿衣指数"/></LinearLayout><TextView android:id="@+id/title"android:layout_below="@id/clothes"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="18dp"android:textColor="#FF4500"android:background="#77A9A9A9"android:text="生活指数:"/><ListView android:id="@+id/lifevalue"android:headerDividersEnabled="false"android:fitsSystemWindows="false"android:layout_below="@id/title"android:layout_width="wrap_content"android:layout_height="180dp"android:scrollbars="vertical"></ListView><Button android:id="@+id/forecast"android:layout_below="@id/lifevalue"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:textSize="18dp"android:textColor="#FF4500"android:background="@drawable/button_long"android:text="未来六天天气预报"/> <TextViewandroid:id="@+id/test"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/forecast2"android:text="Button"android:textColor="#ff0033"/><LinearLayoutandroid:id="@+id/forecast2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_below="@+id/forecast"android:orientation="vertical"></LinearLayout></RelativeLayout></ScrollView>3.2 获得和解析数据首先是httpget 主要代码如下:private String connServerForResult(String strUrl) {// 获取HttpGet对象HttpGet httpRequest = new HttpGet(strUrl);// httpRequest.String strResult = "";try {// HttpClient对象HttpClient httpClient = new DefaultHttpClient();// 获得HttpResponse对象HttpResponse httpResponse =httpClient.execute(httpRequest);if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 取得返回的数据strResult =EntityUtils.toString(httpResponse.getEntity());}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}if (strResult.charAt(0) != '{')strResult = '{' + strResult;if (strResult.charAt(strResult.length() - 1) != '}') strResult = strResult + '}';return strResult;}然后对获得的json数据进行解析,主要代码:// 普通Json数据解析private void parseJson(String strResult) {try {JSONObject jsonObj = new JSONObject(strResult).getJSONObject("weatherinfo");// JSONArray jsonArray =jsonObj.getJSONArray("calendarlist");// 清空原数据lifeV.clear();tempes.clear();weathers.clear();winds.clear();fls.clear();// 打开SharedPreferences更新数据Editor write = dataofday.edit();today = jsonObj.getString("date_y"); // 当前日期dayofweek = jsonObj.getString("week"); // 当前星期city = jsonObj.getString("city"); // 城市名称ftime = jsonObj.getInt("fchh");// 更新时间(整点)【更新时间确定temp1属于哪天】write.putString("cityid", cityid);// 城市IDwrite.putInt("ftime", ftime);// 更新时间write.putString("city", city);write.putString("today", today);write.putString("dayofweek", dayofweek);for (int i = 1; i <= 6; i++) {// 六天天气的图片Idimages[i - 1] = jsonObj.getInt("img" + (i * 2 - 1));write.putInt("img" + (i * 2 - 1),jsonObj.getInt("img" + (i * 2 - 1)));// 六天的气温(摄氏度)tempes.add(jsonObj.getString("temp" + i));write.putString("temp" + i, jsonObj.getString("temp" + i));// 六天的天气描述weathers.add(jsonObj.getString("weather" + i));write.putString("weather" + i,jsonObj.getString("weather" + i));// 六天的风力大小及风向winds.add(jsonObj.getString("wind" + i));write.putString("wind" + i, jsonObj.getString("wind" + i));// 六天的风力fls.add(jsonObj.getString("fl" + i));write.putString("fl" + i, jsonObj.getString("fl" + i));}// 生活指数lifeV.add(jsonObj.getString("index"));lifeV.add(jsonObj.getString("index_d"));lifeV.add(jsonObj.getString("index48"));lifeV.add(jsonObj.getString("index48_d"));lifeV.add(jsonObj.getString("index_uv"));lifeV.add(jsonObj.getString("index48_uv"));lifeV.add(jsonObj.getString("index_xc"));lifeV.add(jsonObj.getString("index_tr"));lifeV.add(jsonObj.getString("index_co"));lifeV.add(jsonObj.getString("index_cl"));lifeV.add(jsonObj.getString("index_ls"));lifeV.add(jsonObj.getString("index_ag"));// 写入保存数据write.putString("index", lifeV.get(0));write.putString("index_d", lifeV.get(1));write.putString("index48", lifeV.get(2));write.putString("index48_d", lifeV.get(3));write.putString("index_uv", lifeV.get(4));write.putString("index48_uv", lifeV.get(5));write.putString("index_xc", lifeV.get(6));write.putString("index_tr", lifeV.get(7));write.putString("index_co", lifeV.get(8));write.putString("index_cl", lifeV.get(9));write.putString("index_ls", lifeV.get(10));write.putString("index_ag", lifeV.get(11));// 提交数据mit();} catch (JSONException e) {return;}3.3 在UI上呈现天气信息主要代码如下:protected void onCreate(Bundle savedInstanceState) { // 天气预报页面super.onCreate(savedInstanceState);setContentView(yout.activity_weather);cityname = (TextView) findViewById(R.id.cityname);test = (TextView) findViewById(R.id.test);date = (TextView) findViewById(R.id.tdate);week = (TextView) findViewById(R.id.tweek);temp = (TextView) findViewById(R.id.tempe);// 温度weather = (TextView) findViewById(R.id.weather);clothesv = (TextView) findViewById(R.id.clothesvalue);icon0 = (ImageView) findViewById(R.id.icon);forecast = (Button) findViewById(R.id.forecast);forecast2 = (LinearLayout) findViewById(R.id.forecast2); refresh = (Button) findViewById(R.id.refresh);Dialog = new ProgressDialog(WeatherActivity.this);setListener();// 设置监听器lifeV = new ArrayList<String>();tempes = new ArrayList<String>();weathers = new ArrayList<String>();winds = new ArrayList<String>();fls = new ArrayList<String>();lifeValue = (ListView) findViewById(R.id.lifevalue);dataofday = getSharedPreferences(PREFS_NAME, 0);// 获取数据ftime = dataofday.getInt("ftime", -1);today = dataofday.getString("today", "2015年2月22日");city = dataofday.getString("city", "武汉");dayofweek = dataofday.getString("dayofweek", "星期日");for (int i = 1; i <= 6; i++) {// 图片Idimages[i - 1] = dataofday.getInt("img" + (i * 2 - 1), 0);// 六天温度tempes.add(dataofday.getString("temp" + i, "0"));// 六天天气描述weathers.add(dataofday.getString("weather" + i, "未知"));// 六天风的描述winds.add(dataofday.getString("wind" + i, "未知"));// 六天风力描述fls.add(dataofday.getString("fl" + i, "未知"));}// 生活指数lifeV.add(dataofday.getString("index", "未知"));lifeV.add(dataofday.getString("index_d", "未知"));lifeV.add(dataofday.getString("index48", "未知"));lifeV.add(dataofday.getString("index48_d", "未知"));lifeV.add(dataofday.getString("index_uv", "未知"));lifeV.add(dataofday.getString("index48_uv", "未知"));lifeV.add("洗车指数:" + dataofday.getString("index_xc", "未知"));lifeV.add("旅游指数:" + dataofday.getString("index_tr", "未知"));lifeV.add("舒适指数:" + dataofday.getString("index_co", "未知"));lifeV.add("晨跑指数:" + dataofday.getString("index_cl", "未知"));lifeV.add("晾晒指数:" + dataofday.getString("index_ls", "未知"));lifeV.add("息斯敏过敏气象指数:"+ dataofday.getString("index_ag", "未知"))第四章系统测试在完成大部分代码以后我进行了测试,出现了好多问题,而且原家里网络很差,无法获得及时的帮助,自己以为是个别的人为错误,后来发现是中国天气网的api换了,而且官网打不开,所以致使软件一直无法完成。

相关文档
最新文档