计算机科学与技术专业精品毕业论文--基于android平台的天气软件开发设计内容摘要:
加载界面 草图 实时天气页面:显示实时详细天气情况,主要包括城市名、温度、天气描述、风速、发布时间、温馨提示以及对应的图片等详细天气信息,还有是否默认为默认城市和未来天气按钮,当看到的城市是默认城市时,会提示这是默认城市,当不是默认城市时,这个区域会显示为设置默认按钮,点击可以设置为默认,下次运行程序后会直接显示默认城市信息;在这个页面中设置有菜单,在菜单中给出选择城市和退出选项;如图 : 图 :实时天气界面草图 未来天气页面:显示未来六天的天气信息,考虑到手机界面的原因,这里简要的给出未来每天的天气情况,主要 给出天气变化情况,突出重点,使用户对未来天气信 9 息一目了然;如图 : 图 :未来天气界面草图 选择城市页面:选择要查看的城市名称,然后搜索;这里可以搜索到全国所有县级以上城市和地区,总共 2564 个;当输入错误的时候,会给出提示,不存在该地名;搜索到这个城市后,在下方给出连接,点击后查看;如图 : 图 :搜索界面草图 在每个页面的下方还应显示有版权信息,内容为编写作者和所属组织,在最后将会统一加入到每个界面中的正下方。 10 数据库设计 经过分析,可以知道程序中至少需要设置两张表 cities 和 city, 表 cities 用于存放全国所有城市名称和获取天气数据所对应的城市码,所以应该有两个字段存储它们,表 city 用于存放默认城市的代码,所以只有一个字段。 经过了解,全国共有2564 个县级以上城市,所以在 cities 表中共有 2564 条记录,而在 city 表中只有一条记录,表示如下: 表 : cities 字段名 数据类型 说明 _id Integer 主键 code varchar(10) 城市码 city varchar(10) 城市名 表 : city 字段名 数据类型 说明 _id Integer 主键 code varchar(10) 默认城市码 11 5 系统实现 文件结构介绍 图 :文件结构图 如图 所示,为项目中的文件目录结构。 首先来介绍一下 Android 程序的系统目录: src 目录是 java 文件的存放目录; res 目录是资源文件存放的目录,其中,drawable 文件夹中存放图片, layout 文件夹中存放的是布局文件, values 文件夹存放的是字符串文件,程序中显示的字符串信息都在这里设置。 下面对主要文件进行介绍: :可以理解为整个应用程序的字典,里面存放这大量的静态整型常量。 这个文件是系统自动生成的,最好不要随意修改。 应用程序中用到的字符串、图片、布局文件等等都可以在这里找到对应的 id,在使用的时候直接引用对应的 id 即可; :全局配置文件,程序中的 Activity、 Service、 Broadcast,还有权限声明和其他需要注册到 Android 系统中的等等应用,都需要在这里声明过后 12 才能够正常使用; 以上是对 Android 程序的目录设置做了一个大概的介绍,针对本项目,包的设置和文件的 存放下面也给出详解: 表 :包名介绍 包的名称 说明 存放了 4 个界面类 数据的下载和解析等操作 数据库操作 实体类 后台服务 assets 存放数据库文件 res 资源文件:图片、布局文件等 相关技术介绍 Activity Activity 是 Android 平台中非常重要的一个组件,是所有程序的根本,所有程序的流程都运行在 Activity 之中,是 Android 当中最基本的模块之一。 每一个 Activity 代表着一个界面,它有自己的生命周期,即它的一个产生、运行、销毁的一个周期,对于 Activity,关键是其生命周期的把握,其次就是状态的保护和恢复。 这个过程官方给出了描述,如图 所示: 13 图 : Activity 生命周期 每一个 Activity 本身是一个 Java 文件,在这个 Java 文件里有控件的设置和函数的操作等,但是页面的布局却不在 Java 文件中,而是一个 xml 文件,放在 res 目录的 Layout 文件夹中;每一个 xml 文件称为一个 Layout 布局文件,在对应的 Java文件中设置应用的是哪个布局文件,每一个 Activity 对应一个布局文件。 这里的布局类似于 HTML 中 CSS + DIV 的设计模式,通过设置控件的属性改变控件的位置和显示效果,容易实现和调试。 Intent Intent 是将一个要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent 来协助完成 Android 各个组件之间的通讯。 Intent 负责对应用中一次操作的动 作、动作涉及到的数据、附加数据进行描述, Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。 因此, Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。 Intent 主要是用来启动其他 Activity 或者 Service,所以可以将 Intent 理解成 14 Activity 之间的粘合剂。 Intent 的使用具体有以下 3 种形式: 1. 通过 startActivity 方法来启动一个新的 Activity; 2. 通过 Broadcast Intent 机制可以将一个 Intent 发送给任何对这个 Intent反省去的 BroadcastReceiver; 3. 通过 startService 或者 bindService 方法来和后台的 Service 进行交互。 Service Service 也是 Android 系统中一种很重要的组件,它跟 Activity 的级别差不多,但是它不能自己运行,只能后台运行,并且可以和其他组件进行交互。 Service 执行的是没有界面的长生命周期的代码。 Service 是一种程序,它可以运行很长时间, 但是它却没有用户界面。 Service 可以再多场合的应用中使用。 SQLite SQLite 数据库是 Android 平台内嵌的数据库,它是一个轻型的关系型数据,提供完整的对关系型数据库的操作,对 SQLite 的操作和其他关系型数据库类似,这里简要介绍一下。 这里是在 Windows 平台下,首先打开已创建的 Android 虚拟设备,然后打开命令行提示符,输入 adb shell 命令,切换到 Android 平台下,进入到创建数据库的目录,然后输入命令 sqlite3 数据库名,就可以打开对应的 SQLite 数据库。 接下来就可以进行需要的操作了,不同的是, SQLite 的命令在前面都需要加上一个点,比如查看数据库中的表: . schema,查看表中所有数据: . select * from table。 等,其他命令与此类似。 这里需要指出的是,在 SQLite 数据库的每张表中必须有一个字段是类似于 _id 的整型值,设置为主键,可自动插入,也可手动添加。 有关 SQLite 数据库的内容就介绍到这里,更多的可以到帮助文档中查找。 布局及控件介绍 Android 系统中界面布局方式有很多种,有线性布局、相对布局、表格布 局等, 15 布局文件以 xml 文件的形式存放在系统的资源文件夹中,这里只详细介绍程序中大量用到的线性布局。 线性布局在代码中表示为 Linearlayout,它是以线性的方式逐个显示在它内部声明的控件,布局的方向有垂直和水平两种,并且可以设置宽高等很多属性。 在布局当中添加的是控件,下面是对一些常用控件的简单介绍: TextView:文本显示域,显示的信息内容为字符串形式; ImageView:图片显示域,显示的内容为图片; Button:按钮,可以设置响应的监听器,执行某种操作; EditText:输入文本框,为用户提供输入数据的接口; 控件中的属性有很多,大体上是类似的,也有个别属性是特有的,这里不再详细介绍,在用到的时候可以查阅相关文档。 这里需要指出的是,不论是控件还是资源文件,在应用程序中用到的时候,都是通过 中的整型值引用的,然后进行对对象进行操作。 城市码获取 软件中用到的天气数据来自于中国气象局,这个数据源是免费的,它提供了全国2564 个县级以上城市的天气信息,每一个城市对应一个城市码。 在获取某一城市的天气数据的时候,就是依据这个城市的城市码向服务器发送请求,然后得到对应的天气数据后返回,在界面中显示给用户,所有城市的天气数据的获取都依赖于对应的城市码,所以得到所有的城市名及其城市码就是重中之重的事情。 获取城市及其城市码的地址是 ,后面加上 得到省份编号,然后跟上省份编号 得到地区编号,再用省份编号 +地区编号就可以得到这个地区中所有城市的编号,最后把省份编号 +地区编号 +城市编号得到的就是城市对应的城市码,通过链接 .html 就可以获取这个城市的所有天气数据。 这里写了一个程序来获取这些数据。 这个程序通过遍历来得到所有的城市信息。 首先下载得到包含城市信息的文本内容,然后再解析这个文本得到城市和编号。 遍历全部数 据后,把结果保存起来。 创建连接,然后读入数据,最后将得到的内容以字符串的形式返回。 下载函数如下: 16 public static String getInfo(String url) { BufferedReader in = null。 String info =。 try { URL file。 file = new URL(url)。 in = new BufferedReader(new InputStreamReader(()))。 String line。 while ((line = ()) != null) { info = info + line。 } ()。 } catch (Exception e) { ()。 } return info。 } 每次得到的下载内容包含的是一组数据,这组数据包含很多小组数据,每小组数据用一个“ ,”分割,在每小组数据中有城市名和城市编号,它们之间又用一个“ |”分割,对这组 内容进行解析后得到一个包含城市名和城市编号的二维数组,解析函数如下: public static String[][] parseCity(String content){ if(content!=null amp。 amp。 ().length()!=0){ StringTokenizer st = new StringTokenizer(content, ,)。 int count = ()。 String[][] citys = new String[count][2]。 int i = 0。 int index = 0。 while(()){ String city = ()。 index = (39。 |39。 )。 citys[i][0] = (0, index)。 citys[i][1] = (index + 1)。 i = i + 1。 } return citys。 } return null。 } 17 上面介绍的是下载函数和解析函数。 具体的获取过程通过不断的修改链接地址并调用这两个函数,最后就能够获取全部的数据,最后以文本的形式暂时存储起来。 遍历函数代码如下: public void doIt() { int init = 0。 String webContent。 String urlPre = // ( // 得到省份或一级直辖市代码 [代码 ][名称 ] webContent = (urlPre + .xml)。 String[][] provinces = (webContent)。 String[] groups = new String[]。 String[][] childs = new String[][]。 String[][] cityCode = new String[][]。 // 开始遍历 for (int i = 0。 i。 i++) { // 得到省份名称 groups[i] = provinces[i][1]。 // 由省份码得到城市码的 URL + 01 +.xml StringBuffer urlBuilder = new StringBuffer(urlPre)。 (provinces[i][0])。 (.xml)。 // 得到指定省份或直辖市信息内容 webContent = (())。 // 一个省份内的城市信息 String[][] citys = (webCo。计算机科学与技术专业精品毕业论文--基于android平台的天气软件开发设计
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。