创新实践周设计报告正文.docx

上传人:b****8 文档编号:28294349 上传时间:2023-07-10 格式:DOCX 页数:31 大小:172.40KB
下载 相关 举报
创新实践周设计报告正文.docx_第1页
第1页 / 共31页
创新实践周设计报告正文.docx_第2页
第2页 / 共31页
创新实践周设计报告正文.docx_第3页
第3页 / 共31页
创新实践周设计报告正文.docx_第4页
第4页 / 共31页
创新实践周设计报告正文.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

创新实践周设计报告正文.docx

《创新实践周设计报告正文.docx》由会员分享,可在线阅读,更多相关《创新实践周设计报告正文.docx(31页珍藏版)》请在冰豆网上搜索。

创新实践周设计报告正文.docx

创新实践周设计报告正文

目录

第一章开发工具与环境1

1.1Android开发环境介绍1

1.2Android开发平台搭建1

第二章系统分析与设计3

2.1研究目标3

2.2需求分析3

2.3性能分析3

2.4用户界面设计3

2.5数据库设计4

2.6程序模块设计5

第三章系统详细设计6

3.1文件结构与用途6

3.2数据提供者7

3.3后台服务13

3.3.1获取天气数据13

3.3.2读取天气数据实例15

3.3.3定时更新时间。

16

3.4用户界面16

3.4.1程序入口类ForecastWidget16

3.4.2设置页面ConfigureActivity17

3.4.3详细页面DetailForecastActivity19

3.5动态特效20

第四章结论21

参考文献22

 

第一章开发工具与环境

1.1Android开发环境介绍

Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。

只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的JavaSDK(其中包括JRE:

JavaRuntimeEnvironment)。

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

同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。

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

(1)JavaSDK

(2)Eclipse

(3)AndroidSDK

(4)ADT

1.2Android开发平台搭建

Android开发平台搭建步骤:

①首先到http:

//www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载JavaEE集成版本,可以为平台的搭建省下不少工作。

接着再去站点下载SDK后安装,下载SDK1.5后解压。

第一步下载工序就结束了。

②双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help->InstallNewSoftware->选项卡上的AvailableSoftware,点击右侧的“Add”输入http:

//dl-with”下拉菜单中选择刚才输入的网址。

过一会就会出现一个DeveloperTools选项,勾上以后点击Next以后Eclipse会自动网上查找Android开发工具插件,然后找到AndroidDDMS和AndroidDevelopmentTools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。

③重启后选择Eclipse菜单中的Windows->Preferences在左侧的Android项目中SDKLocation中填入AndroidSDK解压后的目录,然后点击Apply。

④在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的AndroidSDK目录下的tools文件夹。

 

第二章系统分析与设计

2.1研究目标

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

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

本软件是基于Eclipse的开发环境,依托Google气象数据建立气象信息数据库,开发出了针对Android平台的手机天气预报系统。

2.2需求分析

本软件是一个AppWidget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。

这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从Google上获取天气预报信息,并将天气信息保存在数据库中。

从上面的描述中可以基本了解软件的功能需求:

(1)启动AppWidget应用程序;

(2)设置界面:

对要显示天气预报的城市及更新频率进行设置;

(3)显示界面:

通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温度、最低温度、当前温度等。

(4)详细界面:

通过文字图片动画显示当前的天气情况,包括城市当前天气、温度、风向、风速、湿度;同时显示今后四天的天气情况。

2.3性能分析

程序响应速度快、安全性高、信息处理速度快。

2.4用户界面设计

根据需求分析可以知道,应用程序应包含三个主要的用户界面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。

在“设置页面”中,需要对要显示天气预报的城市及更新频率进行设置。

在“显示页面”中,显示当前的天气状况,包括城市名称、温度、湿度、风向、雨雪情况和获取数据时间等信息。

在“详细页面”动态显示当前天气情况,还要显示未来四天的天气情况。

根据对用户界面显示内容的分析,绘制出用户界面的草图,如图4-1所示。

图4-1用户界面草图

2.5数据库设计

本软件中有两部分数据需要存储,一个是显示页面的数据,另一个详细页面的数据。

因此选择SQLite数据库作为存储数据的方法,建立数据库forcasts.db,并且建立两张表weather_forcastt和weather_widget,分别存储显示页面的数据和详细页面的数据。

表4-1详细页面的数据库表weather_forcast的结构

属性

数据类型

说明

_id

integer

自动增加的主键

widgetId

integer

组件的ID号

dayOfWeek

text

周几

low

integer

最低温度

hight

integer

最高温度

icon

text

显示天气的图标

condition

text

未来天气情况

表4-2显示页面的数据库表weather_widget的结构

属性

数据类型

说明

_id

integer

存储Widget组件id

city

text

进行天气信息查询的城市名

updateMilis

text

进行天气信息查询的频率,单位为分/次

isConfigured

text

是否设置

postalCode

text

城市标记

forecastDate

integer

预报日期

condition

text

当前天气情况

tempF

integer

最高温度

tempC

integer

最低温度

humidity

text

当前湿度

icon

text

天气图标

windCondition

text

风向风速情况

lastUpdateTime

integer

最后一次更新时间

2.6程序模块设计

从功能需求上分析可以看出,整个应用程序应划分为4个模块,分别是程序启动、用户界面、后台服务和数据库适配器,各模块之间的关系如图4-2所示。

从模块结构图中不难看出,后台服务是整个应用程序的核心,主要是“数据获取模块”,负责周期性的从Google获取天气信息。

后台服务在程序启动时就由AppWidgetProvider启动,也可由用户界面通过startService()进行启动,启动后的后台服务将一直保持运行状态。

用户界面从数据库中获取天气信息,而没有直接通过网络访问Google的天气数据。

之所以这么实际,一方面可以避免因网络通信不畅造成界面失去响应;另一方面,后台服务可以及时更新数据,以保证数据的准确性。

数据库适配器封装了所有对SQLite数据库操作的方法,用户界面和后台服务会调用它来实现数据库操作。

第三章系统详细设计

3.1文件结构与用途

在程序开发阶段,首先确定“Android平台3G手机气象软件”的工程名为ty-weather,据程序模块设计的内容,建立ty-weather工程。

Weather工程源代码的结构如图5.1所示。

图5.1ty-weather工程的源代码文件

为了使源代码文件的结构更加清晰,Weather工程设置了多个命名空间,分别用来保存用户界面、数据库、后台服务和工具实体的源代码文件,源代码文件的名称以及说明如表5.1所示。

表5.1ty-weather工程的文件用途说明

包名称

文件名

说明

com.ty.weather

ConfigureActivity.java

“设置页面”的Activity

com.ty.weather

DetailForecastActivity.java

“详细页面”的Activity

com.ty.weather

ForecastProvider.java

天气预报相关数据提供者,操作数据库

com.ty.weather

ForecastService.java

后台进程内服务

com.ty.weather

ForecastTimeService.java

后台时间服务

com.ty.weather

ForecastWidget.java

实现AppWidget组件,并启动服务

com.ty.weather

WebServiceHelper.java

网络数据获取模块

com.ty.weather.util

ForecastEntity.java

未来天气信息的类

com.ty.weather.util

ForecastUtil.java

天气信息工具类

com.ty.weather.util

WidgetEntity.java

当前天气信息的类

Android的资源文件保存在/res的子目录中。

其中、/res/anim目录中保存的是产生动画效果的XML文件,/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用来自定义字符串和颜色的文件,/res/xml目录中保存的是XML格式的数据文件。

所有在程序开发阶段可以被调用的资源都保存在这些目录中,具体每个资源文件的用途可以参考表5.2:

表5.2资源文件名称与用途

资源目录

文件

说明

anim

rotatecurrentweather.xml

渐变透明度动画效果

translatecloudleft.xml

画面转换位置移动动画效果(从左至右)

translatecloudright.xml

画面转换位置移动动画效果(从右至左)

translaterain01.xml

画面转换位置移动动画效果(从上至下)

translaterain02.xml

画面转换位置移动动画效果(从上至下)

translaterain03.xml

画面转换位置移动动画效果(从上至下)

translaterain04.xml

画面转换位置移动动画效果(从上至下)

translaterain05.xml

画面转换位置移动动画效果(从上至下)

drawable

cloudy.png

这个文件夹里是工程里所用的图片,如有表示天气状况、数字等,此处不赘述。

dots.png

number_7_tahoma.png

weather_sunny.png

layout

configure.xml

设置城市、天气更新频率的布局

weather.xml

“显示页面”的布局

detail.xml

“详细显示”页面上边的显示当前天气的布局

detailitems.xml

“详细显示”页面下边的显示未来天气的布局

values

color.xml

保存颜色的XML文件

strings.xml

保存字符串的XML的文件

xml

weatherwidget.xml

AppWidget的属性文件

3.2数据提供者

数据提供者ForecastProvider继承ContentProvider,是在应用程序间共享数据的一种接口机制。

应用程序在不同的进程中运行,因此,数据和文件在不同的应用程序之间是不能够直接进行访问的。

而CotentProvider为程序员提供了较高级的数据共享方法,应用程序可以指定需要共享的数据,而其他应用程序则可以在不知数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。

在介绍ForecastProvider的核心代码前,首先了解一下WidgetEntity.java(当前天气信息的类)和ForecastEntity.java(未来天气信息的类)。

(1)WidgetEntity.java的部分代码:

publicclassWidgetEntity{

privateArrayListdetails=

newArrayList();//ForecastEntity对象

privateIntegerid;//编号

privateIntegerupdateMilis;//更新频率

privateStringcity;//城市

privateStringpostalCode;//城市标记

privateLongforecastDate;//预报时间

privateStringcondition;//天气情况

privateIntegertempF;//华氏温度

privateIntegertempC;//摄氏温度

privateStringhumidity;//湿度

privateStringicon;//天气图标

privateStringwindCondition;//风力风向

privateLonglastUpdateTime;//最后更新时间

privateIntegerisConfigured;//是否已设置

......

}

从代码中可以看出,除ForecastEntity的对象details,WidgetEntity类中有以上公有静态属性id、updateMilis、updateMilis、postalCode、forecastDate、condition、tempF、tempC、humidity、icon、windCondition、lastUpdateTime、isConfigured,完全对应数据库中weather_widget的表。

(2)ForecastEntity.java的部分代码:

publicclassForecastEntity{

privateIntegerid;//编号

privateStringdayOfWeek;//星期

privateIntegerlow;//最低温度

privateIntegerhight;//最高温度

privateStringicon;//天气图标

privateStringcondition;//天气情况

privateIntegerwidgetId;//组件id

从代码中可以看出,WidgetEntity类中有以上公有静态属性id、dayOfWeek、low、hight、icon、condition、widgetId,完全对应数据库中weather_forcast的表。

在创建ForecastProvider时,首先需要使用数据库、文件系统或网络实现底层存储功能,这里我们采用数据库建立了数据库设计中的两张表,从而实现了底层存储功能。

然后在继承ContentProvider的类中实现基本数据操作的接口函数,包括添加、删除、查找和更新等功能。

下面就核心代码进行分析。

(1)创建数据库:

DatabaseHelper类继承SQLiteOpenHelper,SQLiteOpenHelper这个类可以辅助建立、更新和打开数据库。

DatabaseHelper在建立数据库时,同时建立了两个数据库表weather_widget和weather_forcast,并对保存配置信息的表进行了初始化。

具体代码如下所示:

privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{

//数据库名称

privatestaticfinalStringDATABASE_NAME="forecasts.db";

//数据库版本

privatestaticfinalintDATABASE_VERSION=2;

//构造方法,重载父类构造

publicDatabaseHelper(Contextcontext){

super(context,DATABASE_NAME,null,DATABASE_VERSION);

}

publicvoidonCreate(SQLiteDatabasedb){

//创建weather_widget表

publicvoidonCreate(SQLiteDatabasedb){

//创建weather_widget表

db.execSQL("CREATETABLE"+TABLE_WIDGET+"("

......);

//创建weather_forecast表

db.execSQL("CREATETABLE"+TABLE_FORECAST+"("

......);

}

}

//重写onUpgrade()方法

@Override

publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){

......

}

}

}

(2)URI设置:

ContentProvider可以提供多个数据集,调用者使用URI(通用资源标识符)对不同的数据集的数据进行操作。

URI用来地位任何远程或本地的可用资源。

ContentProvider使用的URI语法结构content:

////

因此,我们就需要先来对URI进行设置。

代码如下:

publicstaticclassWeatherWidgetsimplementsBaseColumns{

//继承BaseColumns可以提供自动生成的ID

//声明CONTENT_URI

publicstaticfinalUriCONTENT_URI=Uri.parse("content:

//"

+AUTHORITY+"/widgets");

publicstaticfinalStringFORECAST_END="forecasts";

//指操作多条数据

publicstaticfinalStringCONTENT_TYPE="vnd.android.cursor.dir/awidget";

//指操作单条数据

publicstaticfinalStringCONTENT_ITEM_TYPE="vnd.android.cursor.item/widget";

}

(3)查询功能:

首先我们先了解一下SQLiteQueryBuilder的query()方法。

query(SQLiteDatabasedb,String[]projectionIn,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringsortOrder,Stringlimit),参数说明如表5.3:

参数

说明

SQLiteDatabasedb

要查询的数据库实例

String[]projectionIn

是一个字符串数组,里边的每一项代表了需要返回的列名

Stringselection

相当于SQL语句中的where部分

String[]selectionArgs

是一个字符串数组,里边的每一项依次替代在第三个参数中出现的问号(?

StringgroupBy

相当于SQL语句当中的groupby部分

Stringhaving

相当于SQL语句当中的having部分

StringsortOrder

描述是怎么进行排序

Stringlimit

相当于SQL当中的limit部分,控制返回的数据的个数

查询功能的核心代码如下:

publicCursorquery(Uriuri,String[]projection,Stringselection,

String[]selectionArgs,StringsortOrder){

//getReadableDatabase()这个函数会数据库是否存在、版本号和是否可读等情况,

//决定在返回数据库对象前,是否需要数据库。

返回一个可读的数据库对象。

SQLiteDatabasedb=dbHelper.getReadableDatabase();

//声明了一个SQLiteQueryBuilder对象,该对象利用传入的参数生成一个完整的

//sqlite查询语句,还可以完成查询工作并返回结果集(Cursor)。

SQLiteQueryBuilderqb=newSQLiteQueryBuilder();

Stringlimit=null;

//通过一个switch语句,完成了通过uri种类的辨别来生成不通的SQLiteQueryBuilder对象的工作。

switch(uriMatcher.match(uri)){

caseWIDGETS:

{

qb.setTables(TABLE_WIDGET);

break;

}

caseWIDGETS_ID:

{

StringappWidgetId=uri.getPathSegments().get

(1);

qb.setTables(TABLE_WIDGET);

qb.appendWhere(BaseColumns._ID+"="+appWidgetId);

break;

}

caseWIDGETS_FORECASTS:

{

//Pickalltheforecastsforgivenwi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1