admin管理员组

文章数量:1567520

2024年7月12日发(作者:)

基于Android的手机天气预报系

合肥学院

2013届 毕 业 论 文(设 计)

论文(设计)题目

院系名称

专业(班级)

姓名(学号)

基于Android的手机天气预

报系统

计算机科学与技术系

计算机科学与技术

2009级本科3班

丁同飞 ()

屠 菁

袁 暋

2013-06-02

基于Android的手机天气预报系统

中 文 摘 要

天气预报为人们了解天气状况和出行安排带来了方便,但是,大多数天气预报软件都是

基于PC端,查询起来并不是很便捷。而随着智能手机的普及和3G技术的发展,手机端实现

天气查询成为了可能,因此,实现手机端的天气预报系统成为了人们迫切需要且切实可行的

需求。

本设计使用Android设计技术开发了一种运用在Android系统上的手机天气预报软件系

统,本系统通过选择城市来获得天气,风向,温度等信息。基于手机的天气预报系统软件可

以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不

必要的麻烦,具有很强的实用性。

本论文首先进行了项目的背景介绍,开发的目的及意义,接着进行系统分析(包括需求

分析、研究目标和内容),接着分析了Android系统的框架,然后介绍了本系统的用到的技

术以及平台的搭建,最后论述了本系统的详细设计(包括功能模块设计、数据库设计等),接

着进行了项目的测试用例分析,最后给出了结论以及展望。

关键词:天气预报;Android;linux内核

Based on the Android of mobile phone weather forecast system

ABSTRACT

Weather Forecast for people to understand weather conditions and travel arrangements

to bring the convenience, however, most weather forecasts are based on the PC side software,

check it is not very convenient. With the popularity of smart phones and 3G technology,

mobile client queries become possible to achieve weather, therefore, realize the phone side of

weather forecasting system has become an urgent need for people with practical needs.

This design uses design techniques developed an Android application in the Android

system mobile weather software system, the system by selecting the city to get weather, wind

direction, temperature and other information. Phone-based weather forecasting system

software allows users around the weather conditions for real-time control, which greatly

facilitates the user's travel and travel arrangements, to avoid unnecessary trouble, and highly

practical.

This paper first introduces the background for the project, the development of purpose

and meaning, followed by systems analysis (including needs analysis, research objectives and

content), and then analyzes the framework of the Android system, then introduces the

technology used in this system as well as platform structures, and finally discusses the detailed

design of the system (including functional module design, database design, etc.), followed by

analysis of the project's test cases, and finally gives the conclusion and outlook.

Keyword: android;the Linux kernel;the weather forecast

I

目 录

中文摘要 ......................................................................

ABSTRACT ..................................................................... I

目 录 .................................................................... II

第一章 绪论 .................................................................. 0

1.1引言 ............................................................... 0

1.2系统开发的背景介绍 .................................................. 0

1.3系统开发的目的 ..................................................... 1

1.4项目开发的意义 ..................................................... 1

第二章 系统分析 .............................................................. 2

2.1研究目标 ........................................................... 2

2.2需求分析 ........................................................... 2

2.3系统研究内容 ....................................................... 3

2.4项目需求分析 ....................................................... 3

第三章 系统架构分析 ........................................................... 4

3.1 Android系统的特点 ................................................. 4

3.2 Android的功能 ..................................................... 4

3.3 Android架构 ....................................................... 5

3.3.1 Linux Kernel .............................................. 6

3.3.2 Android Runtime ........................................... 6

3.3.3 Library ................................................... 7

3.3.4 Application Framework ..................................... 7

3.3.5 Application ............................................... 7

3.4系统组件 ........................................................... 8

3.4.1 Activity .................................................. 8

3.4.2 Service ................................................... 8

3.4.3 BroadcastReceiver ......................................... 9

3.4.4 Content Provider .......................................... 9

第四章 系统开发及其相关技术 .................................................. 10

4.1 Android开发环境介绍............................................... 10

4.2 Android开发平台搭建............................................... 10

4.3 SQlite ............................................................ 11

4.3.1 SQlite简介 ............................................... 11

4.3.2 SQlite特性 ............................................... 11

4.3.3 SQlite功能 ............................................... 12

4.3.4 SQlite类型 ............................................... 12

第五章 系统的设计与实现 ...................................................... 13

5.1技术支持 .......................................................... 13

5.2数据库的设计 ...................................................... 14

5.3主要模块 .......................................................... 16

5.3.1项目功能界面 .............................................. 16

5.3.2项目框架 .................................................. 17

II

5.4主要代码解析 ...................................................... 18

第六章 系统测试与运行 ........................................................ 28

6.1系统功能界面 ...................................................... 28

结 论 .................................................................... 32

参考文献 .................................................................... 33

致 谢 .................................................................... 34

III

合肥学院计算机科学与技术系毕业论文

第一章 绪 论

1.1引言

手机是已经成为了生活中不可少的通信设备,没有手机有时会让人觉得寸步难行,手机

将脱离传统的打电话,发短信等基本功能,而基于智能手机的处理能力和可扩展能力,基于

3G网络高速数据传输,越来越多的功能和业务将被开发出来并大规模的应用。正基于此,

当全世界的目光聚集在此的时候,Google于2007年11月5日宣布推出基于linux平台的开

源手机操作系统,号称首个为移动终端打造的真正开发和完整的移动软析------android

[1]

现有的3G技术和移动互联网技术的快速发展,智能手机功能的不断增强,让基于

Android平台的查询需求越来越多。

本软件就是利用现有的网络快速获取网络上的天气信息并显示到手机终端上,为用户提

供实时的天气查询和近期天气查询服务,为工作、出行等带来便利。

1.2系统开发的背景介绍

Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机

联盟(Open handset Alliance)开发。它采用了软件层(Software stack)的构架,主要分为

三个部分。底层以Linux为内核作为基础,由C语言开发,只提供基础功能,中间层次包话

函数库和虚拟机,由C++开发。最上层是各种应用软件,包话通话程序,短信程序。应用软

件由各公司自行开发,以JAVA编写

[2]

Android这个平台对于Google对于大众的意义不在于手机本身,Android存在的目的也

不在于挑起手机操作系统之间的混战,而在于推动移动互联网产业链的迅速成型。

以Google,苹果和诺基亚为中心各自形成的生态链将以原来数倍的速度推动移动互联网

的发展,这正是Google发布Android平台的意义,也是Android平台存在的使命所在,而

作为Android平台成员之一的中国移动也投资成立了一家通讯公司,专门从事Google手机

平台上添加飞信,输入法等一系列符合国内用户使用特色的功能。国内众多个业也将目光投

入了Android上面,并启动了相关的计划来深入地理解并发展Android。更多的手机软件开

发企业已经或者筹备着将公司进行转型,从其主向的开发转向到Android的开发。

基于此,我们有必要通过进行相关的研究来了解Android平台,来了解开发Android的

那一大批人的先进的理念和思想,并通过这些来了解手机软件行业,进而了解未来移动互联

网的发展趋势,从而更好的适应时代的需要。

0

合肥学院计算机科学与技术系毕业论文

1.3系统开发的目的

在科技日益发达的今天,社会竞争越来越激烈,这要求人们不断的摄取信息,同时手机

发展到现在已经成为广大人民群众的日常使用的通读工具,手机的功能也日趋完善。我国的

通读移动通讯功能同样得到了很大的提高。手机软件可以安装在手机上的软件,完善原始系

统的不足与个性化。随着科技的发展,现在手机的功能也越来越多,越来越强大。经济发展

和社会进步,人们的出行更加频繁,对于天气的关注更加强烈,基于这种原因我们开发了一

种运用在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,

风向,温度等信息。基于手机的天气预报系统软件可以使用户对于各地的天气情况的实时掌

握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦。本次设计在Android手机

系统可以准确预测包括:时间,温度,风向等,并显示在手机界面上,方便准确地了解天气

信息。

1.4项目开发的意义

Android平台3G手机气象软件的开发可以进一步扩大气象信息的覆盖面,让广大公众

能够在第一时间方便且快捷地获取最新的气象预报(预警)信息,以便提前预防,把气象灾

害造成的损失降到最低。同时也可以强化气象公共服务的职能,完善公共服务体系、改善公

共服务手段、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发

展的现实性作用。

1

合肥学院计算机科学与技术系毕业论文

第二章 系统分析

2.1研究目标

1)了解Android应用程序的设计和开发过程;

2)使用多种组件进行Android 平台的手机气象软件的开发。

本软件是基于Eclipse的开发环境,依托国家气象局提供的气象数据接口建立气象信息

数据库,开发出了针对Android平台的手机天气预报系统。

2.2需求分析

设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户的需求,因

此针对上述要本设计应滿足:

1)加载界面

程序开始运行时显示加载界面,此界面是应用程序最先展现的窗口,应尽量保持界面信

息简洁。

2)天气显示界面

显示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当日的建议,用

户可通过按菜单键来显示更新当前天气与设置天气显示的界面背景,以及跳转至设置预报城

市界面来更换预报城市。

3)预报城市设置

由自动设置预报城市与手动设置两部分组成,自动设置实现GPS定位功能,自动确定当

前用户所在地;而手动设置则通过可伸展性下拉列表单击选择系统数据库中预存的城市来进

行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城

市时跳转至天气显示界面,来显示该城市三天内的天气状况;在天气界面用户可通过菜单键

选择城市,更新天气与更换背景,第一次运行时自动跳到该界面。

4)Widget桌面小部件

为了方便用户实时了解天气状况,特别添加在Android系统桌面上显示当前天气与时间

的小部件,使用户拿起手机第一刻就能了解当前天气与时间的小部件,使用户拿起手机第一

刻就能了解天气,同时当用户单机小部件时,自动跳转至天气显示界面,显示三天内的详细

2

合肥学院计算机科学与技术系毕业论文

天气。

2.3系统研究内容

1)数据源的选取

2)界面的设计

3)代码的设计

4)程序的测试

5)产品的发布

2.4项目需求分析

根据功能的需求,分析此项目的主要功能应该具有以下几点:

1)系统比较稳定,具有实用性和通用性

2)系统设计界面应尽量美观得体,操作简便明了,便于人们使用

3)可以较好的查询出人们需要查询的有关天气的相关信息,包括天气,风力,温度,

建议等等。

4)可以进行对使用者所在城市的定位以及对其他城市的天气查询

5)个性化的widget桌面部件

3

合肥学院计算机科学与技术系毕业论文

第三章 系统架构分析

Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前尚

未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由

Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开

发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以

及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,

跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,

中国市场占有率为68.4%

[3]

Android是一个移动设备的软件平台,是由Linux+Java构成的开源软件,它提供包括

SDK、Key Apps、Middleware、Linux Kernel四个部分在内的全套手机软件方案。它开放了

基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为我

们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,

也可以开发新的组件供应用程序调用

[4]

3.1Android系统的特点

1)开放性。Google与开放性手机联盟合作开发了android,Google通过与动行商,通

过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建

立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。

2)应用程序无界限。Android上的应用可以通过标准API访问核心移动设备功能。通

过互联网,应用程序可以声明它们的功能可提供其它应用程序使用。

3)应用程序是在平等的条件下创建的,移动设备上的应用程序可以被替换或扩展,即使

是拨号或主屏幕这样的核心组件。

4)应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML,javascript和样式

表,还可以通过Webview显示内容。

5)应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并

行运行,在后台运行时,应用程序可以生成通知引起注意

[5]

3.2Android的功能

1)支持虚拟键盘。虚拟键盘的出现意味着基于Android1.5或以上的版本的移动设备可

以同时支持特理键盘和虚拟键盘。

4

合肥学院计算机科学与技术系毕业论文

2)使用widget实现桌面的个性化。可以用widget修饰自已的桌面。大多数小的Web

应用都是从网络上获得实时数据并展示给用户的,android预装了5个桌机Widget,包括数

字时钟,日历,音乐播放器,相框。

3)用在线文件快速浏览数数,类似于OSX Leopard的Quicklook特征,Android的在线

文件夹可显示的数据条目,比如联系人,喜欢的应用,E-mail信息,播放列表,书签,RSS

源等,并不需要运行系统程序处理特定的数据条目。

4)视频录制和分享。Android还有录制和分享视频的功能,对回放和MPEG-4,3GP等

视频也有了更好的支持。可以通过E-mail,MMS或直接上传到youtube等方式来分享视频。

5)更快,更兼容的浏览器,Android的基于Webkit内核的浏览器带来了重要的调速半

置,这得益于新的Wenkit渲染引擎和优化的JAVA脚本编译器。

6)Voice search语音搜索。带有语音识别技术的Google手机已于2008年11月面世,它

支持语音搜索功能,该功能增强了默认的搜索能力,已超过了纯文本搜索。

7)立体蓝牙和免提电话。除了增强的免提电话体验,Android还支持立体蓝牙(A2Dphe

和AVCRP),并有自动配对功能。

8)强大的GPS技术.Android内部提供了大量的GPS组件,我们可以很轻松地获得设备

当前的位置等信息,让导航等功能更加完善。

9)Android系统硬件检测,android可自动检测和修复SD卡的文件系统,允许第三方

应用显示Android系统的硬件特征,为了让用户下载到与自已的设备匹配的应用,我们可以

检测用户设备的硬件信息,让满足应用要求的设备安装该程序,当更多的android设备建立

在不同的硬件上时,这个功能显得很实用

[6]

3.3Android架构

Android的系统架构和其它操作系统一样,采用了分层的架构。android分为四个层,从

高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

5

合肥学院计算机科学与技术系毕业论文

图3-1 Android架构

Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android

的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前

只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正

意义上的开放式操作系统

[7]

3.3.1Linux Kernel

Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆

栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上

层提供统一的服务。 如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下

层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了

变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAccess Point),

专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel

层。

3.3.2Android Runtime

Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。

每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟

机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,

dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。 大多数

6

合肥学院计算机科学与技术系毕业论文

虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,

一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,

可以将 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有时必须

进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。 Dalvik虚拟机依赖于Linux 内核

提供基本功能,如线程和底层内存管理。

3.3.3Library

Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过

Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:

系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备媒体库——

基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及

静态图像文件,包括MPEG4、 H.264、MP3、 AAC、AMR、JPG、 PNG界面管理——

管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层LibWebCore——新式的

Web浏览器引擎,驱动Android 浏览器和内嵌的web视图SGL——基本的2D图形引擎3D库

——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅

FreeType——位图和矢量字体渲染SQLite——所有应用程序都可以使用的强大而轻量级的

关系数据库引擎。

3.3.4Application Framework

通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开

发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添

加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序

的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以

使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用

程序其实是一组服务和系统,包括:视图(View)——丰富的、可扩展的视图集合,可用于

构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提

供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共

享自己的数据资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、

图形和布局文件通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显

示自定义警告活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航

回退功能。

3.3.5Application

Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、

浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序

7

合肥学院计算机科学与技术系毕业论文

有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android

本身是一套软件堆叠(Software Stack),或称为「软件叠层架构」,叠层主要分成三层:操作

系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里

贡献了自己的一份力量。

3.4系统组件

Android开发四大组件分别是:活动(Activity): 用于表现功能。服务(Service): 后台

运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商

(Content Provider): 支持在多个应用中存储和读取数据,相当于数据库

[8]

3.4.1Activity

应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity

使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于

一张Form。

一个Activity通常展现为一个可视化的用户界面。例如,一个Activity可能展现为一个

用户可以选择的菜单项列表或者展现一些图片以及图片的标题。一个消息服务应用程序可能

包含一个显示联系人列表的Activity,一个编写信息的Activity,以及其它一些查看信息和修改

应用程序设置的Activity。虽然这些Activity一起工作,共同组成了一个应用程序,但每一个

Activity都是相对独立的。每一个Activity都是Activity(ty)的子类。

3.4.2Service

Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数

据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的

Activity已经不处于激活状态或不可见。

Service没有用户界面,但它会在后台一直运行。例如,Service可能在用户处理其它事

情的时候播放背景音乐,或者从网络上获取数据,或者执行一些运算,并把运算结构提供给

Activity展示给用户。每个Service都扩展自类Serivce。

应用程序可以连接到一个正在运行中的Service。当连接到一个Service后,可以使用这

个Service向外暴露的接口与这个Service进行通信。对于上面提到的播放音乐的Service,

这个接口可能允许用户暂停,停止或重新播放音乐。

与activity以及其它组件一样,Service同样运行在应用程序进程的主线程中。所以它们

不能阻塞其它组件或用户界面,通常需要为这些Service派生一个线程执行耗时的任务。

8

合肥学院计算机科学与技术系毕业论文

3.4.3BroadcastReceiver

Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符

合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响

应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。

Broadcase Receiver不执行任何任务,仅仅是接受并响应广播通知的一类组件。大部分

广播通知是由系统产生的,例如改变时区,电池电量低,用户选择了一幅图片或者用户改变

了语言首选项。应用程序同样也可以发送广播通知,例如通知其他应用程序某些数据已经被

下载到设备上可以使用。

3.4.4Content Provider

提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据

库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己

的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider

去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等

有用的数据库。

应用程序可以通过Content Provider访问其它应用程序的一些私有数据,这是Android

提供的一种标准的共享数据的机制。共享的数据可以是存储在文件系统中、SQLite 数据库

中或其它的一些媒体中。Content Provider扩展自ContentProvider类,通过实现此类的一组

标准的接口可以使其它应用程序存取由它控制的数据。然而应用程序并不会直接调用

ContentProvider中的方法,而是通过类ContentResolver。ContentResolver能够与任何一个

ContentProvider通信,它与ContentProvider合作管理进程间的通信。

9

合肥学院计算机科学与技术系毕业论文

第四章 系统开发及其相关技术

4.1Android开发环境介绍

Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,

Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用

Java语言进行开发,还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime

Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有

Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发

工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。

简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开

发。

1)Java SDK

2)Eclipse

3)Android SDK

4)ADT

日前,Google Android Studio 1.0 开发环境的推出,无疑给Android软件开发带来了极

大的便捷。

4.2Android开发平台搭建

Android开发平台搭建步骤:

1)首先到/downloads/下载Eclipse集成开发环境并且解压,这里

推荐下载Java EE 集成版本,可以为平台的搭建省下不少工作。接着再去

/javase/downloads/

一步下载工序就结束了。

2)双击Eclipse解压后目录中的然后启动,选择Eclipse菜单中的Help-> Install

New Software-> 选项卡上的Available Software,点击右侧的“Add”输入

/android/eclipse/后确定,然后在“Work with”下拉菜单中选择刚才输入

的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动

站点下载

/android/android-sdk-windows-1.5_,Android SDK1.5后解压。第

10

合肥学院计算机科学与技术系毕业论文

网上查找Android 开发工具插件,然后找到Android DDMS和Android Development Tools,

选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启

Eclipse。

3)重启后选择Eclipse菜单中的Windows-> Preferences 在左侧的Android项目中SDK

Location中填入Android SDK解压后的目录,然后点击Apply。

4)在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的Android

SDK目录下的tools文件夹。

4.3SQlite

4.3.1SQlite简介

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标

是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式

设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操

作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接

口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速

度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,SQLite

也迎来了一个版本 SQLite 3已经发布。

不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接

到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这

在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本

身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候

锁定整个数据文件而完成的

[9]

4.3.2SQlite特性

1)比一些流行的数据库在大部分普通数据库操作要快

2)简单, 轻松的API

3)包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

4)良好注释的源代码, 并且有着90%以上的测试覆盖率

5)独立: 没有额外依赖

6)Source完全的Open, 你可以用于任何用途, 包括出售它

11

合肥学院计算机科学与技术系毕业论文

7)支持多种开发语言,C, PHP, Perl, Java, C#,Python, Ruby

4.3.3SQlite功能

SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL

包括:

ATTACH DATABASE

BEGIN TRANSACTION

COMMENT

COMMIT TRANSACTION 等等。

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得

有点象,但是事实上它们区别很大。比如SQLite 支持跨平台,操作简单,能够使用很多语

言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者

你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。目前它的最新版

本是 3.7.8 。它的官方网站是:. org或者 .com .cn,能在

上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究

数据库系统开发的专业人士

[10]

4.3.4SQlite类型

SQLite的数据类型,首先你会接触到一个让你惊讶的名词: Typelessness(无类型)。 对!

SQLite是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列

中, 无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释)。 对于SQLite来说

对字段不指定类型是完全有效的。如:

Create Table ex1(a, b, c);

诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类

型。 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一

个提示或帮助的作用

[11]

12

合肥学院计算机科学与技术系毕业论文

第五章 系统的设计与实现

5.1技术支持

本软件是基于andriod的手机天气预报系统。

1)首先天气预报功能是调用国家气象局的免费接口:

本软件使用到的中国国家气象局天气预报接口总共有两个:

/data/sk/

/data/

上面url中的101010100是城市代码,这里是北京的城市代码。只需要改变城市代码,

就可以得到所在城市的天气信息。

在浏览器上输入url:/data/sk/得到信息,天气信

息是json的数据格式。

第一个接口主要是获取当天天气的具体信息,实时温度信息。

第二个接口主要是获取当天及未来几天的粗略天气信息。

2)json数据解析:

JavaScript Object Notation,但是独立于语言。类似XML,可以用来文本信息的存储和

交换,是数据的载体。从天气预报接口获得天气信息时需要对天气进行解析,解析出自己需

要的天气信息。

3)定位功能:本软件采用的是百度地图定位

因为google在中国服务不稳定,使用google API获取地理信息在某些型号手机上无法实

现,因此使用百度SDK定位功能,调用百度类库实现定位,百度定位SDK所需文件:

locSDK_, 。

4)widget桌面部件:

AppWidget 框架类:

1、AppWidgetProvider :继承自 BroadcastRecevier , 在AppWidget 应用 update、

13

合肥学院计算机科学与技术系毕业论文

enable、disable 和 delete 时接收通知。其中,onUpdate、onReceive 是最常用到的方法,

它们接收更新通知。

2、AppWidgetProvderInfo:描述 AppWidget 的大小、更新频率和初始界面等信息,

以XML 文件形式存在于应用的 res/xml/目录下。

3、AppWidgetManger :负责管理 AppWidget ,向 AppwidgetProvider 发送通知。

4、RemoteViews :一个可以在其他应用进程中运行的类,向 AppWidgetProvider 发送

通知。

5)android -

这个是android界面特殊效果的第三方的jar包。

5.2数据库的设计

本软件选择SQlite数据库作为数据存储的载体,建立数据库all_,此数据库记录了

所有城市的信息和查询代码,在查询指定城市的天气时,需要用到它提供的城市码,而城市

码相对稳定不变,所以在构建系统时将其事先复制到手机的存储设备中,以备日后查询。其

中存在两个表:Provice和city,Provice包括和,City包括和c

,并且provice和city形成级联关系。

在进行初始化数据库时还建立了订阅城市表TB_CITY。

表5-1 订阅城市表

字段名

FIELD_CITY

_ID

FIELD_CITY

_NAME

FIELD_WEA

THER1

FIELD_TIM

类型

INTEGER

TEXT

TEXT

TEXT

14

描述

Primary

Key

城市名

当天天气

当天时间

合肥学院计算机科学与技术系毕业论文

E1

FIELD_WEA

THER_IMG1

FIELD_REA

LTIME_TEMTEXT

P

FIELD_TEM

PERATURE1

FIELD_WIN

D

FIELD_ADVI

CE

FIELD_TIM

E2

...

数据库相关操作:

1)插入

INTEGER

当天天气图

当天实时气

当天气温

当天风力

建议

明天天气

...

TEXT

TEXT

TEXT

TEXT

...

15

合肥学院计算机科学与技术系毕业论文

public void insertMyCity(int id, String name, boolean isDefault) { //插入我订阅的城市信

ransaction();

try {

L("update tbCity set isDefault = 0");

L("INSERT OR REPLACE INTO tbCity

(cityId,cityName,isDefault) VALUES (?,?,?)", new Object[] { id, name, isDefault });

nsactionSuccessful();

} catch (Exception e) {

tackTrace();

} finally {

nsaction();

}

}

2)删除

public void deleteMyCity(int id) {//删除我订阅的城市

L("delete from tbCity where cityId = ?", new Object[] { id });

}

5.3主要模块

5.3.1项目功能界面

启动程

加载界

初始化

添加城

刷新

退出

定位

后退

城市管

天气显

16

合肥学院计算机科学与技术系毕业论文

图5-1 功能模块图

5.3.2项目框架

本项目主要框架如下:

图5-2 项目框架图

其中各文件的功能是:

Constant 是一些常量定义的地方。

WeatherApplication 是一个android应用启动最先启动的地方,在这里进行全局变量初

始化 打开数据库等操作,AllCityActivity 是所有城市选择列表界面,CitymanageActivity 是

显示当前你的订阅的城市,LaunchActivity 是启动画面,MainActivity 是天气显示界面,主

界面。

DBHelper 是数据库建表操作,DBManager 是对数据库增删改查操作。

City 是城市类,MyCity 是订阅城市类,Province 是省关联到City 省、市形成级联

UpdateReceive 接受更新命令的广播,UpdateService 是更新服务,所有的更新请求服

务器操作,接受返回信息。

Widget 是桌面小控件控制。

17

合肥学院计算机科学与技术系毕业论文

HttpConnect 是http请求操作工具类。

MyLog 是打印日志工具类。

MyThreadPool 是线程池工具类。

ImageUtil 是图片选择工具类,NetworkUtil 是检测手机网络工具类,StreamUtil 是转

换Http数据流工具类。

ServerResponseException 是自定义的一个异常 当远程服务器响应出现问题时,抛出此

异常。

5.4主要代码解析

5.4.1启动界面

在启动界面,当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) ,

主线程为管理界面中的UI控件,进行事件分发,如果此时需要一个耗时的操作,你不能把这

些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完

成的话,会收到Android系统的一个错误提示 "强制关闭".这个时候我们需要把这些耗时的

操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也

就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现

了.来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Me

ssage对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMess

age()方法传弟)Message对象,(里面包含数据),把这些消息放入主线程队列中,配合主线程进

行更新UI。

private Handler handler = new Handler() { //使用handler时首先要创建一个handler

public void handleMessage(Message msg) {

// TODO 接收消息并且去更新UI线程上的控件内容

Message(msg);

//Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传

递数据,

//这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法

传弟)Message对象,(里面包含数据),

//把这些消息放入主线程队列中,配合主线程进行更新UI

switch () {

case 1:

Intent intent = new Intent(,);//从

LaunchActivity转到MainActivity

startActivity(intent);//启动MainActivity

finish();//结束LaunchActivity

break;

18

合肥学院计算机科学与技术系毕业论文

} } };

进入启动界面后,可定义2秒后跳转至天气显示界面:

e(new Runnable() {//匿名内部类,此时传给myThreadPool构造函数

的应该是一个实现Runnable的类的对象引用

@Override

//Runnable是一个接口,不是一个线程,一般线程会实现Runnable。

//所以如果我们使用匿名内部类是运行在UI主线程的,如果我们使用实现这个

Runnable接口的线程类,则是运行在对应线程的

public void run() { //定时器 2秒之后跳转

while (!) {

try {

(50);//线程休眠50毫秒

//如果大于50毫秒时不进行休眠。这里让线程休眠的目的就控制游

戏画面的刷新频率。

//如果不足50毫秒可能是作者认为刷新太快了

} catch (InterruptedException e) {

tackTrace();

} }

finishTime = tTimeMillis();//记录下逻辑处理完成时的时间.

if (finishTime - startTime < 2000) {//如果处理时间小于2秒的话线程需要

等足到2秒也就是(2000 - 逻辑处理的时间差)再进行下次操作.

try {

(2000 - (finishTime - startTime));

} catch (InterruptedException e) {

tackTrace();

} }

ptyMessage(1);//通过Handler,发送到消息队列里面去运

行,//执行完毕后给handler发送一个消息 } });

5.4.2天气显示界面文件

该文件中是一个android应用最先启动的地方,在这里进行全局变量初始化,打开数据

库等操作。

初始化应用:

19

合肥学院计算机科学与技术系毕业论文

public void init() { //初始化应用

allCities = openDataBase().queryAllCity(); //从数据库读取所有城市信息

cities = openDataBase().queryMyCity();//读取所有我订阅的城市信息

if (!y()) { //设置默认城市

for (int i = 0; i < (); i++) {

if ((i).isDefault)

curCityIndex = i;

}} else

curCityIndex = -1;

}

设置一个定时更新的提醒:

public void setAlarm() { //设置定时更新提醒

Intent intent = new Intent(this, );

ion("");

sender = adcast(this, 0, intent, 0);

// 开始时间

long firstime = dRealtime();

am = (AlarmManager) getSystemService(ALARM_SERVICE);

// 5秒一个周期,不停的发送广播

eating(D_REALTIME_WAKEUP, firstime, 5 *

1000, sender);

}

打开数据库操作:

public DBManager openDataBase() { //开启数据库操作

if (isDataBaseOpened == false || dbManager == null) {

dbManager = tance(this);

isDataBaseOpened = true;

}

return dbManager;

5.4.3当前订阅城市界面

在该界面主要是显示当前你所订阅的城市,在该界面用了一个Adapter适配器来进行下

拉菜单的操作:

cityAdapter = new CityAdapter(this, );

pter(cityAdapter);

temClickListener(new ClickListener() {

public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3)

{

}

20

合肥学院计算机科学与技术系毕业论文

yIndex = arg2;

e(new Runnable() {

public void run() {

for (MyCity city : ) {

ult = false;

}

(yIndex).isDefault = true;

taBase().changeDefault((WeatherApplication.

curCityIndex).id);

} });

hUpdate();

Intent i = new Intent("");

sendBroadcast(i);

finish();

} });

同时在该界面还添加了一个长按菜单,当你想要删

除你所订阅的城市时,长按,会出现是否删除对话框:

temLongClickListener(new LongClickListener() {

public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2,

long arg3) {

dialogue((arg2));

return false;

}

});

5.4.4定位功能

当你第一次运行该程序时,进行定位功能时,会出现你当前所在的城市,并且会出现是

否添加对话框,定位时调用百度地图定位的类库:

private void settingLocation() { //初始化定位,调用百度定位的类库

mLocationClient = new LocationClient(licationContext());

mBDLocationListener = new MyBDLocationListener();

erLocationListener(mBDLocationListener);

LocationClientOption option = new LocationClientOption();

// 需要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无

地址信息。

rType("all");

// 设置是否返回POI的电话和地址等详细信息。默认值为false,即不返回POI的电

} //添加长按菜单

21

合肥学院计算机科学与技术系毕业论文

话和地址信息。

ExtraInfo(true);

// 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提

供更高效准确的定位服务。

dName("定位我当前的位置");

// 打开GPS,使用gps前提是用户硬件打开gps。默认是不打开gps的。

nGps(false);

eOut(6);

// 定位的时间间隔,单位:ms

// 当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。

// nSpan(1000);

// 查询范围,默认值为500,即以当前定位位置为中心的半径大小。

Distance(500);

// 禁用启用缓存定位数据

eCache(true);

// 坐标系类型,百度手机地图对外接口中的坐标系默认是bd09ll

rType("bd09ll");

// 设置最多可返回的POI个数,默认值为3。由于POI查询比较耗费流量,设置最

多返回的POI个数,以便节省流量。

Number(3);

// 设置定位方式的优先级。

// 即使有GPS,而且可用,也仍旧会发起网络请求。这个选项适合对精确坐标不是

特别敏感,但是希望得到位置描述的用户。

ority(kFirst);

Option(option);

}

进行定位时,打印log信息,获取省份和城市信息:

private class MyBDLocationListener implements BDLocationListener {

public void onReceiveLocation(BDLocation location) {

MyLog.i("收到了位置信息!");

if (location == null) {

ptyMessage(10);

return;

}

String temp1 = vince(); // 获取省份信息

String temp2 = y(); // 获取城市信息

if (temp1 == null || temp2 ==null) {

ptyMessage(10); //通知handle更新

return;

}

mProvince = ing(0, () - 1);

mCity = ing(0, () - 1);

MyLog.i(mProvince + "===" + mCity);

22

合肥学院计算机科学与技术系毕业论文

ptyMessage(0);

}

@Override

public void onReceivePoi(BDLocation poiLocation) {

MyLog.i("收到了位置信息!onReceivePoi");

}

} }

5.4.5菜单项的操作

对菜单进行选择操作,通过选择不同的菜单进入不同的功能界面:

public boolean onOptionsItemSelected(MenuItem item) { //menu选择操作

int item_id = mId();

switch (item_id) {

case 0: //更新操作

if (yIndex >= 0) {

// bled(false);

// nimation(animation);

sage("正在更新...");//进度框

();

Intent intent1 = new Intent(, );

gs(0);

startService(intent1);

}

break;

case 1: //城市管理操作

Intent intent = new Intent(this, );

startActivity(intent);

break;

case 2: //退出

finish();

break;

}

return true;

}

5.4.6更新操作

接受到更新操作的信息后才能进行更新操作,通过startService来开启更新服务,更新操

作时通过myThreadPool = tance()来开启线程,通过httpConnect =

tance()进行http连接。

通过更新操作获取实时的天气信息:

23

合肥学院计算机科学与技术系毕业论文

/**

* 获取当天实时的天气

* @throws ClientProtocolException

* @throws IOException

* @throws ServerResponseException

* @throws JSONException

*/

private void updateRealtime() throws ClientProtocolException, IOException,

ServerResponseException, JSONException {

StringBuilder sb1 = new StringBuilder();//把地址给sb1

(_REALTIME).append((Weat

yIndex).id).append();

InputStream is = (ng());

String jsonString = 2string(is);

JSONObject jsonObject = new JSONObject(jsonString);

JSONObject weather = (JSONObject) ("weatherinfo");

= f(ing("cityid")).intValue();

= ing("city");

meTemp = ing("temp");

}

5.4.7widget功能

由于widget中的时钟关系,需要对widget显示进行时刻的更新用来保持与系统中时间

的一致。实现这个功能需要用到AlarmManager类,这个类专门用来设定在某个指定的时间

去完成指定的事件。设计思路是在Widget的onUpdate方法中启动一个自定义更新后台服务,

更新widget,并设定下一分钟再次调用此服务。

public void onReceive(Context context, Intent intent) { //widget 接收到广播

ive(context, intent);

MyLog.i("Widget onReceive");

t = context;

if (ion().equals("")) {

update();

} }

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]

appWidgetIds) {//更新widget

MyLog.i("Widget onUpdate");

getManager = appWidgetManager;

t = context;

// 定义计时器

if (timer == null)

timer = new Timer();

// 周期性更改时间

le(new TimerTask() {

24

合肥学院计算机科学与技术系毕业论文

}

public void run() {

ptyMessage(0);

}

}, 0, 1000);//改变时间的定时器 一秒钟更新一次

5.4.8http请求操作

由于本设计是实时天气预报系统,因此需要联网,所以要进行http连接,先进行http

请求通过HttpClient接口实现:

private HttpConnect() {

//HttpClient 是接口,DefaultHttpClient是实现这个接口的子类

httpClient = new DefaultHttpClient();// 创建一个默认的HttpClient

//DefaultHttpClient是HttpClient接口的默认实现

//这个类扮演了很多特殊用户程序或策略接口实现负责处理特定HTTP协议方面,

//比如重定向到处理认证或做出关于连接持久化和保持活动的持续时间决定的门

面。这使得用户可以选择使用定制,具体程序等来替换某些方面默认实现。

HttpParams params = ams(); // 计算网络超时用

Parameter(_TIMEOUT, 1000 * 10); //请

求超时

Parameter(TION_TIMEOUT,

1000 * 10); //连接超时

mConnManager = nectionManager();

httpClient = new DefaultHttpClient(new

ThreadSafeClientConnManager(params,emeRegistry()), params);

}

public static HttpConnect getInstance() {//在写程序库代码时,有时有一个类需要被所

有的其它类使用,

//但又要求这个类只能实例化一次,是个服务类,定义一次,其它类使用同一个这

个类的实例

if (httpConnect == null) {

httpConnect = new HttpConnect();

}

return httpConnect;

}

5.4.9检测手机网络

在android手机上运行时需要保持手机网络通畅,因此需要检测手机网络:

25

合肥学院计算机科学与技术系毕业论文

private NetworkUtil(Context context) {

if(cwjManager == null)

cwjManager = (ConnectivityManager)

temService(TIVITY_SERVICE);

}

public static NetworkUtil getInstance(Context context) {

if (networkUtil == null)

networkUtil = new NetworkUtil(licationContext());

return networkUtil;

}

public boolean IsNetworkConnected() {

NetworkInfo mNetworkInfo = iveNetworkInfo();

if (mNetworkInfo != null) {

return lable();}

return false;}

5.4.10线程池ThreadPool

通过运用线程池可以实现程序高效的运行:

public class MyThreadPool {

private static MyThreadPool myThreadPool;

private ExecutorService mExecutor;

private MyThreadPool() {

mExecutor = hedThreadPool();

}

public static MyThreadPool getInstance() {

if (myThreadPool == null) {

myThreadPool = new MyThreadPool();

}

return myThreadPool;

}

public void execute(Runnable command) {

if(mExecutor == null)

mExecutor = hedThreadPool();

e(command);

}

public void shutdown()

{

wnNow();

mExecutor = null;

myThreadPool = null;

} }

26

合肥学院计算机科学与技术系毕业论文

27

合肥学院计算机科学与技术系毕业论文

第六章 系统测试与运行

6.1系统功能界面

1)加载界面:

本天气预报为掌上天气,当运行该程序时,会先进入一个加载界面:

图6-1 加载界面

2)进入天气界面时,因为是第一次进入,所以未设定城市,该界面是:

图6-2 初始化界面

3)当要选择查询天气时,可以点击菜单按钮,会出现三个菜单:

28

合肥学院计算机科学与技术系毕业论文

图6-3 显示菜单项

4)点击进入城市管理界面,在城市管理界面是一个下拉列表,每一个省会下又有自己

对应的下拉列表:

图6-4 城市管理界面

5)定位功能,上图城市列表中有一个水滴图标,点击该按钮可实现定位:

29

合肥学院计算机科学与技术系毕业论文

图6-5 定位功能并添加城市

6)点击添加后,进入天气显示界面:

图6-6 天气显示界面

7)在该界面还可以选择查看其它城市天气预报:

30

合肥学院计算机科学与技术系毕业论文

图6-7 添加其他城市及壁纸自动更换功能

8)壁纸功能:

由上面合肥和北京两地的北京图片可知,当天气有不同时,背景会随着天气的不同而出

现自发的改变。

9)widget桌面小部件,点击widget小部件会直接进入天气显示界面

图6-8 widget界面

31

合肥学院计算机科学与技术系毕业论文

结 论

本文针对上述问题展开研究,完成了基于Android手机的天气预报的系统设计与实现,

其功能基本符合用户的需求,能够实现各个模块的设计要求。

本设计使用Android设计技术开发了一种运用在Android系统上的手机天气预报软件系

统,本系统通过选择城市来获得天气,风向,温度等信息。基于手机的天气预报系统软件可

以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不

必要的麻烦,具有很强的实用性。

本论文首先进行了大致的进行了项目的背景介绍,开发的目的及意义,接着进行了系统

分析(包括需求分析、研究目标和内容),进而深度分析了Android系统的框架,然后介绍

了本系统的所用到的各种技术以及如何进行Android平台的搭建,最后论述了本系统的详细

设计(包括功能模块设计、数据库设计等),接着进行了项目的测试用例分析,最后圆满完成

该设计。

在这个过程中,我学会了很多知识,比如Android环境的搭建、Intent、Activity、Service、

ContentProvider、SQLite等,但我学会的最重要的一点是,利用现有的资源去解决问题,在

图书馆、在网络上寻找答案。

本次毕业设计可以说是圆满完成,但是该软件还是有一点的瑕疵,受到天气接口的影响,

目前只能调用国家气象局的免费天气预报接口,然而在该接口传过来的明后天的信息中,天

气图标的信息传递的不准确,导致系统运行时会出现明后天天气小图标出现显示紊乱的现象,

同时在2G网络下该接口也会出现异常,未来希望可以寻找到更好的接口,使程序能够得到

完美的运行。

32

合肥学院计算机科学与技术系毕业论文

参考文献

[1] 靳岩,姚尚朗.GOOGLE Android开发入门与实战

[M].北京:人民邮电出版社,2010.

[2] 马超,孙仁贵.Android应用开发全程实录[M].北京:

人民邮电出版社,2011.

[3] 柯元旦.Android内核剖析[M].北京:电子工业出版

社,2011.

[4] 杨丰成.Android开发揭秘[M].北京:机械工业出版

社,2010.

[5] 李宁.Android开发完全讲义(第2版)[M].北京:

中国水利水电出版社,2012.

[6] 邓凡平.深入理解Android[M].北京:机械工业出版

社,2011.

[7] 哈希尔.精通Android3[M].北京:人民邮电出版社,

2011.

[8] 李宁.Android移植与调试[M].北京:机械工业出版

社社,2011.

[9] 吴亚峰.Android开发设计[N]:计算机报,2011.3.

[10] 郝玉龙.Android开发讲议[J]:清华学报,2011.6.

[11] 杨海波.Android手机系统讲座[J]:电脑报,2011.6.

33

合肥学院计算机科学与技术系毕业论文

致 谢

随着毕业日子的到来,毕业设计也接近了尾声。经过半年多的奋战我的毕业设计终于完

成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过

这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,

而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。

自己要学习的东西还太多,通过这次毕业设计,我才明白学习是一个长期积累的过程,在以

后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。

在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的

大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同

学。

总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入

手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能

实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到

34

合肥学院计算机科学与技术系毕业论文

真正会用的时候才是真的学会了。

在此要感谢我的指导老师对我悉心的指导,感谢老师给我的帮助。在设计过程中,我通

过查阅大量有关资料,与同学交流经验和自学以及向一些在android方面比较厉害的同学朋

友请教以及上网查资料等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨

大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力

的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使

我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但

是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。

35

本文标签: 系统开发天气应用程序