基于Android的天气预报APP
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Android的天气预报APP
摘要:Window 操作系统的诞生成就了微软帝国,同时也造就了PC 时代的繁荣,然而如今,以Android 和iPhone 手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了PC 时代的丧钟!这也预示着移动互联网时代(3G)已经来临。
在这个互联网繁荣的时代,有一颗超新星,以它独特性能优势与人性化的UI 设计使它在短短的几年迅速的占领了智能移动设备的市场份额,它就是Google 的Android!这也意味着Google 在移动互联网时代开始抢跑并领跑。
Android 是基于Linux 平台完全开源的手机操作系统,同时开发语言为Java,这对于Java 开发的我们是何等的诱人,程序员的技术要与时代同行,因此我选择了以Android 为平台的手机天气预报系统来作为我的毕业设计,选择手机天气预报系统不仅可以提升技术,同时也很实用,为人们时刻了解天气状况和出行带来了方便。
关键词:Android;数据库;框架模块
Weather Application For Android
Abstract: Window operating system was born the achievements of the Microsoft empire,also contributed to the prosperity of the era of PC, however now, to Android and iPhone phone for the rise of the representative of the smart mobiledevices with the invention of the Internet cloud has sounded the the death knell of the era of PC! This also indicates that the mobile Internet Era (3G) has come. In the era of the Internet boom, there is a single supernova, with its unique performance advantages and humanized UI design enable it in just a few years rapidly occupied the market share of the smart mobile devices, it is Google Android! This also means that the Google in the mobile Internet era and lead the false start. Based on Linux platform completely open source mobile operating system. At the same time, the development language for Java, which for java development we is how tempting Android, programmers should be with the times, so I chose to Android platform mobile weather systems as my graduation design, choice of mobile weather forecasting system can not only upgrade technology and also very practical, for people always understand weather conditions and travel brings convenience.
Keywords:Android;database ;frames module
基于Android的天气预报APP
1 引言
1.1开发背景
近几年来随着3G 技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。
在Google 和Android 手机联盟的共同推动下,Android 在众多移动应用开发平台中脱颖而出。
Android 是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。
为顺应潮流,本设计旨在搭载Android 的移动设备上运行,实现天气状况的实时动态更新与显示,方便人们的出行与生活。
1.2 开发内容及意义
Android 平台天气预报APP是基于Android手机平台[1],基于Java从聚合数据接口上获取天气及城市信息,开发出针对于Android平台的手机天气预报系统的应用软件;为了能随时随地的查询天气信息,更加方便的了解天气信息,开发手机移动端的天气预报APP是非常需要的;Android系统是开源的手机操作系统,Android最大的优势在于它的开发式的体系架构,更容易被优化和使用。
1.3 国内外发展现状
人们的生活和天气信息,温度是分不开的,进行农业生产的时候离不开天气,工业生产也离不开天气,因此开发一款可以显示天气信息的APP是很重要的,目前的手机天气APP分为两种版本一种是Android版本的天气APP另外一种则是IOS版本的天气APP,但是根据现在手机用户的使用调查信息来看的话,Android的使用用户远远的高于IOS的使用用户,所以开发一款基于Android的天气APP是非常重要的,不论是出去游玩还是工作,手机上有一款可以实时更新的天气信息的APP成为了必要的存在。
2 系统分析
2.1 研究目标
1 了解Android应用程序开发框架的基本思维和开发过程。
2使用各种组件对应用程序的填充,搭配,跳转,本软件是基于Eclipse的开发环境,由聚合数据进行数据接口的提供搭建的SQLite数据库,四大组件穿
插使用,所开发的一款针对于Android手机平台的天气预报App[2]。
2.2 需求及功能分析
随着时代的发展,手机现在已成为人们生活中必不可少的通信工具,手机所具有的功能也日益强大,手机也开启了网络服务,更加方便人们对手机上网的要求,同样手机对人们的日益重要也推进了手机硬件和软件两方面的发展;同样手机应用软件的开发,弥补了手机系统的不足。
本人所制作的天气预报APP就是在现有普通手机的基础上,可以在手机上实现天气情况的实时更新,天气预报的查询,方便人们的出行。
本软件是一个APP 应用程序,启动之后在城市列表界面可以进行城市的切换,同样也可以在城市列表页面对具体城市的天气信息进行查询[3];在Menu 界面可以进行更新频率的设置,GPS定位的开启,刷新数据按钮对天气数据进行实时的刷新获取;在天气显示界面,可以显示天气信息及七天内的未来天气信息,有图文进行标示,更加清晰明了的看到天气情况。
从上述描述可以基本了解本软件的基本功能实现:
1.启动APP应用程序。
2.设置界面(Menu菜单界面):设置更新天气的频率,GPS的开启和关闭,设置刷新时间。
3.天气显示界面:显示本日的详细的天气信息,温度,湿度,天气情况,温度范围,风度等等;并有温馨提示以及未来七天内的天气情况,图文显示更加直观美观[4]。
4.城市显示界面:显示城市列表(县级及以上的城市),点击城市最后一级列表可以切换城市,显示该城市的天气信息。
5.性能分析:点击进入应用程序,动画之后进入主页面,显示当天及未来
几日内的天气信息,主页面上方有两个按钮分别是切换到城市信息界面和设置界面的按钮。
本软件操作简单,上手容易,设计人性化,加载速度快,信息处理快。
2.3可行性分析
为了能够确保天气预报APP的成功开发和运行,从技术层次、经济条件两方面对本系统的可行性进行了分析和研究。
2.3.1技术可行性
Android的上层应用所使用的语言是Java语言,也需要基于Dalvik虚拟机,所以使用的是Google公司提供的Eclipse,同样还需要配置Java JDK,同样Android开发和Java开发是有很大区别的,Android的开发同样还需要配置Android SDK,需要为Eclipse安装ADT,通过使用MVC设计模式[5],使得数据以视图的形式显示到APP界面上,让用户更加清晰的掌握,了解天气信息,通过切换城市列表显示城市信息,用户可以根据自己的需求,切换城市显示自己想要得到的城市的天气信息,以现有的技术是可以实现本APP的开发的。
以上软件准备好了就可以对开发环境进行配置,搭建开发环境,从而进行Android应用程序的开发,开发所需要的软件如下所示:
1.Java JDK
2. Android SDK
3.Eclipse
4.ADT
开发过程中所需要使用的技术主要是Android的四大组件,分别为Activity,Service,BroadcastReceive广播,ContentProvider。
其中Activity主要是负责进行页面的交互和跳转功能,各种页面的设计都要在Activity中实现,并且是通过Activity进行向用户展示的以及和用户之间的交互;Service主要是负责进行后台的操作,当页面消失,用户仍需要进行数据处理以及信息传递的时候,这个时候需要用到Service进行后台的处理[6];广播主要是负责进行数据的传递,当系统或者Service后台需要对数据操作的时候,这个时候需要使用广播进行数据的传递;ContentProvider主要是负责跟数据库之间的交互,通过匹配的规则对数据库进行增删改查[7]。
在XML中放置了很多控件,如Button、View、Textview、EditView 等,通过这些控件我们可以开发出我们需要的用户界面[8]。
Layout 大致可以分为五种常用的布局如:LinearLayout 线性布局:可以将子控件按照水平和垂直的两个方向进行布局,搭建我们需要的用户界面;RelativeLayout 相对布局:一个允许子视图相对于其他视图或是父视图,通过ID指定来确定自己的位置。
每个视图的位置能够指定它相对于其他视图或是父视图即是相对布局的大布局。
TableLayout 表格布局:可以设置布局的行和列,通常是嵌套在其他的布局当中。
FrameLayout单帧布局:五大布局中最简单的一个布局,可以说成和其他布局一块使用的布局。
在这个布局中,整个界面被当成一块空白的区域,所有的元素都不能被固定自己制定的位置,它们统统放于这块区域的左上角,并且后面的元素直接覆盖在前面的元素之上,将前面的子元素部分和全部遮挡。
AbsoluteLayout(绝对布局):在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。
屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大[9]。
在此布局中的子元素可以相互重叠。
当然在使用四大组件的时候都是需要根据不同的情况,对在项目中的清单文件中进行注册不同的权限,在做本项目的时候需要在清单文件中注册网络请求的权限,因为在获取天气信息的时候,主要是通过使用聚合数据提供的API接口,进行网络数据的交互。
在进行本项目设计的过程中最主要的难点是JSON数据的解析,主要的技术还是JSON数据解析技术,主要的实现模块,例如天气信息,城市信息,都是要用到JSON数据解析来对从接口中获取的信息进行操作,然后显示在视图中的[10]。
2.3.2 经济可行性
本APP是为广大使用用户开发的,由下载用户使用,开发成本不高,通过对比使用大量人力来维护而言,不仅没有增加成本,反而降低了成本。
本系统是由本人独自完成,通过已掌握技术进行开发,经济投入不大,所以天气预报APP具有经济可行性。
3 系统设计与功能实现
3.1 项目设计
3.1.1系统架构图
本项目的系统主要分为三个模块,分别是天气信息显示的模块,城市信息显示模块以及GPS定位显示模块。
当点击本项目的APP应用程序的时候,会进入到软件当中,第一个显示的页面就是天气信息显示的页面,分别在页面上面左右两边放置了菜单显示按钮和设置按钮,当点击菜单按钮就会进入城市信息显示的页面,城市信息显示的页面主要分为三个等级的界面,分别是省级的城市列表,市级的城市列表和县级的城市列表,当点击设置按钮的时候则会跳转到主要的设
置界面,其中有GPS定位设置的按钮,当点击开启的时候,系统就会开启GPS 定位功能[11]。
SHITOUWEATHER
显示三种信息显示信息
根据不同城市显示查询
定位获取当前位置信息
图3-1系统架构图
3.1.2项目框架
其中ChooseArea是用来选择城市的切换城市信息的;GPS是用来处理定位信息;WeatherActivity 是用来显示详细的天气信息MainActivity是用来存放进入动画;GPSchoose 是用来进行定位城市选择的类;Image类是用来存放天气信息对应的图片的类;More类则是用来显示菜单的界面的Activity;News类是更新数据的类;shezhi类是用来显示设置界面的Activity;Model包中存放的是城市信息的类;db包中存放的是创建数据库的类;util包中存放的是一些基础的工具类;receiver和Service包中存放的分别是广播和后台操作的组件。
如图3-2所示图3-2项目框架代码搭建图
3.2 Android程序UI界面设计
在Android中,用户界面都是布局在XML文件中的,布局文件都是存放在/res/layout目录下的;这是不同于Java的布局处理方式。
在Android系统中布局文件都是在XML文件中的,这样就使得XML文档只处理用户UI界面的设计,Java程序就专门的负责业务逻辑的实现,降低了程序的耦合,更加有利于代码的维护、优化和修改,符合了Android的经典模式MVC模式[12]。
在我的项目当中主要是使用了LinearLayout和RelativeLayout两种布局从图3-3中可以知道图3-3项目页面布局图
其中about.xml是用来显示软件简介信息界面的布局,activity_main.xml是用来显示登录界面的布局,addcitytext,xml是添加城市的界面布局,Choose_area.xml 是显示所有城市信息的listView界面的布局,More.xml是菜单设置界面的布局,Weatherlayout.xml是用来显示天气信息的详细界面的布局以上就是所做项目的几个重要的布局
3.2.1 登录欢迎页面的设计与实现
此界面是一个线性的布局,使用多线程Handle的消息传递机制设置时间等待发送消息进行下一步的跳转,主要是为了界面的美观,等待两秒之后主页面展示出来,布局中在中间的位置设置了文字,使得进入界面的时候更加清晰明白,也是为了界面的好看。
如图3-4所示
private static final int TIME = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(yout.activity_main);
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case TIME:
Intent intent = new Intent(MainActivity.this,
ChooseArea.class);
startActivity(intent);
finish();
break;
default:
break;
}
}
};
handler.sendEmptyMessageDelayed(TIME, 2000);
};
图3-4登录动画页面图
3.2.2 主界面的界面实现
当进入界面,程序会在启动时进行数据操作获取信息,获取信息成功之后会显示到布局当中,在界面会显示如下信息:
日期:当天的日期,格式为--月--日。
天气:当天的天气情况。
天气图片:在天气的有方,显示与当天天气相符的天气图片,如太阳,云朵。
气温:格式为当天的最低温度/最高温度,单位是摄氏度。
风力:风向和强度大小。
指数:有各项指数,包括穿衣指数,过敏指数等等。
天气实况:指查询时刻的天气情况,包含有空气质量,以及紫外线强度,湿度,天气,温度。
设置按钮:用户点击这个按钮之后,进入到设置页面,可以对一些基础功能进行设置。
菜单按钮:用户点击这个按钮时,可以进入到查询界面。
定位按钮:使用的是TextView,使用的是TextView的Drawable属性,添加了一个背景图片,点击之后会进入城市选择界面,然后进行定位。
布局的效果如图3-4
图3-4主界面显示图
3.2.3城市信息界面设计
在城市信息界面的最上方放置一个小的水平的线性布局线性布局里面首先放一ImageView控件,用一个返回的背景作为按钮显示,然后放置一个TextView 设置文字属性为居中。
作为Title的标题布局,创建一个垂直的线性布局,里面放置一个ListView用作该页面的主布局[13]。
在Java代码添加一句addHeadVIew ()[15];把之前的布局文件放入其中这样就实现了城市信息显示的布局,点击每个城市名称的时候会显示一个三级界面模式,主要显示的界面分为省,市,县三个等级的界面。
如下图3-5
图3-5城市信息显示图
3.2.4设置界面的设计与实现
首先标题是一个位于界面的上部中间TextView 文字显示:设置,然后下面的每一行都是一个线性布局设置背景为白色,标题TextView下部分别放置线性布局,每个线性布局分为一个TextView和一个ImageView,TextView:用来显示的是需要的设置名称;ImageView:显示的是添加的一个背景图片;然后在每个线性布局之后添加一个View,背景设置为灰色,主要是为了分割每个不同线性布局的设置。
具体实现代码如下:
<LinearLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f3f3f3"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="bottom|center_horizontal"
android:text="设置"
android:textSize="20sp" />
<LinearLayout
android:id="@+id/refshtime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/background_light"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_weight="10"
android:background="#0000"
android:gravity="left|center_vertical"
android:text="更新频率" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@raw/back" />
</LinearLayout>
<View
android:layout_width="wrap_content"
android:layout_height="5dp"
android:background="#f3f3f3" />
3.2.5设置频率的界面设计
点击每一项设置之后都会跳转到一个新的页面,点击更新频率之后会跳转到设置频率的界面
设置频率的界面是使用相对布局做的首先是一个TextView 文字为更新频率:,然后添加一个NumberPicker里面是1-12之间的数字,可以根据自己的想法选择一个你想设置的频率,
在NumberPicker之后添加一个TextView 文字设置为:小时。
具体的显示如下图3-6所示
图3-6频率界面图
3.2.6 GPS界面设置
点击设置界面里面的GPS自动定位,会跳转到设置GPS的详细界面,整个页面的显示使用的是相对布局,首先是在布局的中央位置放置TextView 并且文字设置为GPS自动定位,然后在TextView的右侧放置的是RadioGroup,里面嵌套了两个RadioButton ,可以进行选择是否打开自动定位[14]。
具体显示如图3-7所示:
图3-7 GPS定位界面图
3.2.7设置界面的关于页面设置
点击设置界面关于设置之后会显示一个线性布局,首先在布局的顶部放置的TextView显示的文本是本软件的名称IWeather,然后该TextView下部再放置一个TextView文本设置为使用开发的Android版本,直接是使用TextView文字为XML文件中固定的文字,之后下面的文字也是使用的TextView文字内容也是直接写上去的文字具体显示如图3-8所示:
图3-8详细介绍本软件页面图
3.3具体功能的实现
3.3.1添加缓存
第一次进入界面,会直接显示我设置的默认的城市的天气信息,我设置的默认城市是北京,如果不进行手动切换城市的话,直接显示的是北京的近一周内的天气信息。
默认城市的设置是采用SharedPreferences进行的缓存,通过第一次进入判断是否是默认的城市如果是则显示默认城市的天气信息,如果不是则直接跳转到城市选择界面进行选择城市然后加载城市的天气信息[15]。
主界面的布局上,我采用了HorizontalScrollView可滑动的控件进行处理的,用来显示近一周的天气信息
3.3.2天气信息的显示
对于天气信息的获取则是我在网上找到的接口(聚合数据天气预报Api接口)通过资源定位Url获取到,然后使用Json数据解析,解析到本地使用SharedPreferences做了一简单的存储
String countryName = getIntent().getStringExtra("country_Name");
String address = "/weather/index?format=2&cityname="
+ URLEncoder.encode((countryName))
+ "&key=7ebbb80d32581784c4861bd4df50cb73";
URL url = new URL(address);
InputStream inputStream = url.openStream();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String read = "";
String jason = "";
while ((read = bufferedReader.readLine()) != null) {
buffer.append(read);
}
jason = buffer.toString();
Untility.handleWeatherResonse(WeatherActivity.this, jason);
handler.sendEmptyMessage(0);
bufferedReader.close();
获取到的天气信息通过JSON数据解析,解析之后存放人数据库SQLite然后通过布局文件中控件的setText方法把获取到的信息显示在天气显示界面上,然后通过判断解析的数据里面的文字添加天气的图片信息,天气的信息和匹配到的图片显示到界面,这样一份比较简洁和好看的天气信息就显示出来了。
3.3.3设置菜单
在主页面中有两个按钮一个为城市菜单按钮和设置菜单按钮,在主页面显示的Java代码中对两个按钮设置点击事件,当点击设置菜单按钮,跳转到设置菜单页面。
设置菜单中放置的是五个线性布局,分别对五个线性布局设置点击事件,通过点击事件的设置再点击设置菜单中每一个模块的时候都会跳转到相应的页面进行显示,对设置中每个布局,所有事件的点击事件都要设置监听,通过使用BroadCastReceive进行广播通知软件进行操作的设置的改变,通过绑定Service 进行后台的操作,当退出主页面的时候也会进行操作对软件进行监听,数据的修改更新。
3.3.4城市列表
点击菜单按钮之后跳转到城市显示列表,列表界面首先是背景设置为蓝色,然后使用listVIew 显示城市信息,给listView设置点击事件,点击每个城市名称显示三级菜单,分别为省,市,县。
在点击的时候添加了判断,加入了progressBar 判断网络连接以及是否刷新出页面,会显示刷新效果
public boolean isNetworkAvailable(Activity activity) {
Context context = activity.getApplicationContext();
// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (int i = 0; i < networkInfo.length; i++) {
System.out.println(i + "===状态==="
+ networkInfo[i].getState());
System.out.println(i + "===类型==="
+ networkInfo[i].getTypeName());
// 判断当前网络状态是否为连接状态
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
判断网络是否连接,如果网络没有连接则会显示刷新失败,网络未连接的ProgressBar。
public String getWebContent(String url) {
// 创建一个http请求对象
HttpGet request = new HttpGet(url);
// 创建HttpParams以用来设置HTTP参数
HttpParams params = new BasicHttpParams();
// 设置连接超时或响应超时
// HttpConnectionParams.setConnectionTimeout(params, 3000);
// HttpConnectionParams.setSoTimeout(params, 5000);
// 创建一个网络访问处理对象
HttpClient httpClient = new DefaultHttpClient(params);
try {
// 执行请求参数项
HttpResponse response = httpClient.execute(request);
// 判断是否请求成功
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
// 获得响应信息
String content = EntityUtils.toString(response.getEntity());
return content;
} else {
// 网连接失败,使用Toast显示提示信息
Toast.makeText(context, "网络访问失败,请检查您机器的联网设备!",
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放网络连接资源
httpClient.getConnectionManager().shutdown();
}
return null;
}
如果连接网络,并且一切正常,则从接口上获取到的城市信息就可以完整的显示出来。
显示效果如图3-5所示的城市信息列表显示页面
3.3.5城市跳转选择显示天气信息
在菜单目录中显示的城市信息,当点击了某一个城市的时候,因为通过使用聚合数据API接口来获取的天气信息,在接口中是通过获取的CityName来进行网上天气信息的获取解析。
所以切换城市的时候当你确定选中某一个城市的时
候,通过我封装的方法(封装的方法附录代码中会有标注)就会到该城市的城市名称,然后再天气获取的Java代码中通过调用该方法来获取固定城市的天气信息,同时也实现了城市切换选择之后的查询天气的显示。
3.3.6 GPS定位功能实现
通过调用百度API接口,其API都在android.location包下,一共有三个接口和八个类,通过调用该API接口来实现定位功能。
三个接口:
GpsStatus.Listener:当GPS发生改变的时候用来监听改变事件,是用来接受改变通知的接口。
GpsStatus.NmeaListener:这是一个用来从GPS里接收Nmea-0183信息的接口。
LocationListener:监听位置的接口,当位置发生改变的时候用来接收事件改变的信息。
八个类:
Address:用来定义地址的类,比如:浙江杭州
Criteria:用于定义Location Provider的类,包括定位精准的位置,电量消耗水平,是否获取海拔、方位信息,是否允许接收付费服务。
GeoCoder:用于对地理位置的处理。
GpsSatellite:和GpsStatus联合使用,用于描述当前GPS卫星的状态。
GpsStatus:和GpsStatus.Listener联合使用,用于描述当前GPS卫星的状态。
Location:用于定义位置的基础类。
LocationManager:用来调用系统位置的服务的Manager系统类
LocationProvider:定义的Location Provider的抽象的父类,能够周期性的获取当前的位置。
在AndroidManifest.xml清单文件里需要加入ACCESS_FINE_LOCATION权限:
3.3.7后台更新数据及刷新天气信息
后台更新操作主要是使用Service,通过使用BroadCastReceive来发送广播,通过Intent适配器来进行各个组件之间的信息传递,当接收到广播之后,我在软件中设置的后台组件Service进行绑定操作,跟Activity进行绑定,当接收到广
播需要进行数据更新或是刷新数据的时候,后台Service就会进行数据的操作,用以更新天气信息或是城市信息。
4 性能测试与分析
4.1性能测试
4.1.1项目的调试
在做项目的过程中,遇到很多的困难。
比如说在每个模块进行单独设计和制作完成的时候,页面的跳转以及城市切换天气信息的切换,因为能更好的维护自己的代码,可以让自己的代码利用率高,创建了很多的类,和很多的方法,当调用这些单独封装的方法或者类的时候,就会遇到各种问题比如说在单独的线程中进行了耗时的操作这样就会造成程序的ANI,又或者在调用的时候没有注意到Activity的生命周期,有时候就会造成程序的空指针异常直接程序退出。
当然在创作的过程中遇到的最大的问题还是对JSON数据的解析,因为之前自己没有对JSON解析进行过多的了解,在程序代码的书写过程中,对于空指针异常的错误是经常有的事,通过上网查询资料有关JSON方面的详细介绍,解决了也对JSON解析有了更深刻的了解。
还有一个经常出现的问题就是在使用Binder通信机制进行绑定Service后台操作的时候,绑定的时候有时候忘记绑定Service,这时候就会出现Runntime异常,或者在返回binder的时候忘记返回binder对象,程序也是会直接的FouceClose。
4.1.2项目的测试
首先是对界面的屏幕适配进行测试,通过使用不同品牌不同型号的手机安装该软件对屏幕的适配进行测试,然后就是对里面的主要的功能代码的测试,通过不断的对城市信息的切换,以及天气信息的更新刷新和对GPS定位功能的大量的测试,来查看主要的功能模块的数据获取是否稳定。
4.1.3项目的测试结果及评价
通过对项目的大量的操作测试,本人所制作的软件稳定性高,界面简洁,功能使用方便,界面美观,非常适合大多数人的使用习惯。
4.2 效果图
当安装好软件,点击进入启动该软件,会显示动画效果如图4-1。