J2ME应用与开发课程设计报告J2ME应用与开发课程设计报告第1页共21页第1页共21页2014-2015学年春季学期《J2ME应用与开发》课程设计报告学院:计算机与信息学院姓名:代雪松学号:2011800626指导教师:杨旺明时间:2015年6月引言及系统概述J2ME应用与开发课程设计报告第2页共21页第2页共21页一、引言安卓是谷歌于2008年推出的一个智能手机操作系统,其独特的设计模式使得开发手机软件变得非常简单。该论文介绍了一款安卓天气预报的设计与实现过程。用户可以通过主界面选择城市来获得包括风力、风向、紫外线强度等的天气信息。基于手机的天气预报系统能够使用户对于各地的天气情况实时掌握,方便用户的出行和行程安排,具有一定的实用性。二、系统概述1.产品描述由于智能手机的快速普及,智能操作系统在手机市场占据了很大一部分,其中以Andriod和iOS最为流行。为了让智能手机用户能够随时随地查询互联网所提供的信息,一种非常高效的方法就是将网络系统的功能扩展到智能手机终端上,让手机能够通过移动网络访问Web网站并处理各种各样的业务。由于在大学学习过java语言,并且Andriod系统是基于java语言开发的,因此想开发一套基于Andriod平台的3G手机气象软件,并从网上获取天气预报信息。Android平台的天气预报软件的开发可以进一步扩大气象信息的覆盖面,让广大Android手机用户能够在第一时间获取最新的天气预报信息,以便提前预防,方便出行。同时,把气象灾害造成的损失降到最低,也可以提高公共服务质量,更好的发挥气象事业对经济社会发展的现实性作用,有巨大的实用价值。三、软件的功能性需求分析(1)系统能够通过手机精确定位全国各个城市未来几天的天气情况(2)系统具有安全性,独立性,可靠性(3)系统界面设计优美,符合用户的操作习惯,且在一定程度上节省流量开销项目设计J2ME应用与开发课程设计报告第3页共21页第3页共21页四、项目设计4.1系统架构图图4.1系统构架图4.2webservice网络拓扑图本系统是基于提供webservice服务的网站接收数据,然后对数据进行解析,从中找到需要的数据。如图2.2所示为提供webservice服务的网站网络拓扑图图4.2网络拓扑图4.3项目框架点击图标进入系统系统显示天气预报主界面点击城市下拉列表选择想要查询的城市跳转到该城市的天气信息界面界面项目设计J2ME应用与开发课程设计报告第4页共21页第4页共21页图4.3工程目录其中GPSActivity用来处理GPS定位信息,WeatherWebServiceActivity为天气预报主界面类,WebServiceUtil用来处理从网站中接收的数据,ConverUtil为处理经纬度转换的类,LoginActivity是处理登录界面的类。项目设计J2ME应用与开发课程设计报告第5页共21页第5页共21页4.4Android的UI界面的实现在Android中用户界面都是布局在XML文件中的。这些XML文件放在工程/res/layout下面。这对以前熟悉java可视化编程的人来说可能有些不太习惯。可能有人疑问为什么要把布局文件放在XML文件里呢?其实有过web基础的都应该知道mvc框架,这是一种用于网站开发的非常优秀的思想,在安卓系统中,安卓开发人员把用户界面放在XML文档中定义,这样就可以让XML文档专门负责用户UI界面设置,而java程序专门负责业务实现,从而降低程序的耦合,便于程序的维护和扩展,符合mvc设计思想。在XML中Android开发人员放置了很多我们经常用到的一些组件,比如view,Button,EditText等,通过这些系统提供的控件,我们可以开发出我们想要的程序界面来。Layout是一类特殊的ViewGroup控件,它们本身并不显示任何的内容,存在的惟一原因就是其中的内部结构,能够更好地摆放它的子控件。比如Linearlayout(线性布局),可将子控件按水平或垂直方向按顺序排列下去;Tablelayout(表格布局),可以将子控件按照表格的形式,一枚枚放置好;Relativelayout(相对布局),实际应用中这个布局更灵活,它可以设定各个控件之间的对齐和排列关系,适合编写复杂的界面。有了Layout的存在,控件和控件之间不再是独立地存在,而是更有机地结合在一起,设定起来也更为方便。在本程序中布局文件我一共用到了如图4.1所示的布局文件图4.1布局文件图项目设计J2ME应用与开发课程设计报告第6页共21页第6页共21页其中city_detail用来显示城市简介的信息,city_environment用来显示当前所在城市的生活指数信息,city_layout用来显示用来选择城市布局,content_layout用来显示天气情况,gps_view用来显示gps定位信息,login用来显示登录欢迎界面,main包含了用来切换的三个界面,tqyb显示主界面布局4.5欢迎界面的实现考虑到程序界面的美观效果,在进入主界面之前我首先设置了一个用来跳转的Activity,并命名为LoginActivity。在LoginActivity中显示login布局Timertimer=newTimer();finalIntentintent=newIntent(this,edu.njue.app.WeatherWebServiceActivity.class);TimerTasktask=newTimerTask(){@Overridepublicvoidrun(){startActivity(intent);LoginActivity.this.finish();}};timer.schedule(task,1000);}程序显示画面一秒后会进入主程序天气界面,如图4.2所示程序欢迎界面项目设计J2ME应用与开发课程设计报告第7页共21页第7页共21页图4.2欢迎界面图4.6主界面功能实现第一次安装好进入程序界面时,系统会显示“本程序是第一次运行,请选择想要了解的城市”的窗口。在这里我把默认城市设置为南京,如果用户不单击城市选择按钮的时候,则会显示的是南京近两天的天气情况。如图4.3所示。第一次运行时,我是通过在手机文件系统中判断是否存在一个名为shared_prefs的文件来判断是否为第一次运行,如果存在则不是第一次运行,系统会继续执行向下执行代码,如果系统中不存在该文件,则为第一次运行该程序,程序弹出对话框告诉用户。项目设计J2ME应用与开发课程设计报告第8页共21页第8页共21页图4.3第一次运行效果图在主程序界面,我运用的主要是ViewFlipper组件,通过该组件可以实现滑动显示界面,不过在设置滑动界面之前我们要先设定滑动的动画。该动画实在res\anim中设置,如图4.4所示为左右滑动效果布局图4.4界面滑动布局其中left_in中的代码为:setxmlns:android=:fromXDelta=100%pandroid:toXDelta=0android:duration=500/alphaandroid:fromAlpha=0.1android:toAlpha=1.0android:duration=500//set项目设计J2ME应用与开发课程设计报告第9页共21页第9页共21页其他四个与此基本相似,在此不再列出。当我们定义了滑动效果之后还要在main.xml中把想要滑动的布局包含进去。ViewFlipperandroid:id=@+id/viewFlipperandroid:layout_width=match_parentandroid:layout_height=match_parentincludelayout=@layout/tqyb/includeandroid:id=@+id/city_envrionmentlayout=@layout/city_environment/includeandroid:id=@+id/city_detaillayout=@layout/city_detail//ViewFlipper有了这个布局之后我们就可以在主程序界面调用界面进行切换了。主程序实现触屏监听接口,监听触摸时的x,y坐标,以及当手指离开时的坐标,如果两者之间的距离大于或小于100像素,则认为想要实现滑动。publicbooleanonTouch(Viewv,MotionEventevent){if(event.getAction()==MotionEvent.ACTION_DOWN){touchDownX=event.getX();returntrue;}elseif(event.getAction()==MotionEvent.ACTION_UP){touchUpX=event.getX();if(touchUpX-touchDownX100){//从左往右滑动viewFlipper.setAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left));viewFlipper.setAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right));viewFlipper.showPrevious();}elseif(touchDownX-touchUpX100){viewFlipper.setAnimation(AnimationUtils.loadAnimation(this,R.anim.right_in));viewFlipper.setAnimation(AnimationUtils.loadAnimation(this,R.anim.left_out));viewFlipper.showNext();}returntrue;}项目设计J2ME应用与开发课程设计报告第10页共21页第10页共21页returnfalse;}获取天气信息并显示天气预报系统最重要的当然是如何才能有效的获取天气信息了,要想获取实时的天气信息,我们就要访问专门提供天气信息的网站把网站返回的信息解析出想要的信息并显示在手机上。通过网上的搜索,我找到了一个提供webservice的网站:通过向这个网站提供参数就可以获取指定城市的天气信息了,该网站是从中央气象台接收的信息,数据准确可靠。每隔两个小时更新一次天气情况,具有很好的实时性。Webservice的出现成功的解决了不同平台和语言之间进行数据交换的问题,它主要使用XML文档来传递消息,并将该消息发送给任何请求对象,由于不同系统对XML的完美支持,因此从根本上完善了跨平台服务,任何时刻、任何平台我们可以使用任何语言来访问该Webservice服务。对于Webservice使用者而言,webserviceAPI与任何操作平台无关,它只是以XML语言作为数据交换格式。Webservice平台主要涉及到的技术是SOAP(SimpleObjectAccessProtocol),WSDL(WebServiceDescriptionLanguage)SOAP依赖于XML文档来构建,一条SOAP消息就是一份特定的XML文档,SOAP主要包含三个方面的主要元素:(1)Envelope…/根元素,该元素是必填的。其中SOAP消息用来传递的数据的XML文档以该元素作为根元素(2)Header…/元素,该元素是选填的。它包含了SOAP消息的头信息(3)Body…/元素,该元素是必填的。它包含所有的调用和相应的内容Java本身提供了很丰富的W