毕业设计(论文)-基于Android平台的天气软件开发.doc_第1页
毕业设计(论文)-基于Android平台的天气软件开发.doc_第2页
毕业设计(论文)-基于Android平台的天气软件开发.doc_第3页
毕业设计(论文)-基于Android平台的天气软件开发.doc_第4页
毕业设计(论文)-基于Android平台的天气软件开发.doc_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文(设计)题 目 基于Android平台的天气软件开发 指导老师 职 称 学生姓名 电 话 专 业 计算机科学与技术 班 级 1 班 院 (系) 电子信息工程学院 完成时间 2012年4月20日 50基于Android平台的天气软件开发摘 要随着时代的发展,智能终端设备与人们的生活结合越来越紧密,人们对于信息的获取也有着更为强烈的需求,特别是与生活关系密切的气象信息。Android作为当前最流行的智能终端平台,自然也存在着类似信息服务的需求。本课题研究的是基于Android平台的天气软件,目的是开发出能够使用户及时了解实时天气状况和未来天气变化的应用程序。本文讲述了基于Android平台的天气软件的开发过程,主要内容包括了Android组件的使用,Java网络编程和IO操作,SQLite数据库技术,JSON数据解析等,结合中国气象网的天气数据信息,实现了用户可在联网状态下,可以查询目标地点实时天气状况和及未来几天天气变化的功能。通过此次开发,不仅实现了预期的效果,还对Android平台下应用程序的开发过程有了一定的了解和掌握。关键词 天气软件/Android/应用程序/JavaANDROID PLATFORM-BASED WEATHER SOFTWARE DEVELOPMENTAbstractWith the development of intelligent terminal equipment and peoples lives more and more closely, it is more strong demand for access to information, in particular, is closely related to meteorological information and life. Android as the most popular intelligent terminal platform, naturally, there is a similar demand for services.The study of this topic is the weather software, based on the Android platform developed to enable users to keep abreast of real-time weather conditions and future changes in the weather application. This article describes the weather software development process based on the Android platform, the main contents include the use of Android components, Java network programming and IO operation, the SQLite database technology, the JSON data parsing, combined with weather data of the Chinese Academy of Meteorological information to achieve a users in a networked state, you can query real-time weather conditions of the target sites, and the next few days, the function of changes in the weather. With this development, not only to achieve the desired effect, but also on the Android platform application development process with a certain amount of understanding and mastering.KEY WORDS weather software,Android,application,Java目 录中文摘要i英文摘要ii目 录ii1 绪论21.1 研究背景21.2 研究内容21.3 研究意义21.4 未来发展趋势22 系统分析22.1 可行性研究22.2 需求分析22.2.1 功能分析22.2.2 用例分析22.3 设计目标23 Android开发环境及平台搭建23.1 开发环境介绍23.2 平台搭建过程24 程序设计24.1 整体设计24.2 界面设计24.3 数据库设计25 系统实现25.1 文件结构介绍25.2 相关技术介绍25.2.1 Activity25.2.2 Intent25.2.3 Service25.2.4 SQLite25.2.5 布局及控件介绍25.3 城市码获取25.4 数据库实现25.4.1 数据库存储25.4.2 数据库操作25.5 用户界面及操作25.5.1 加载界面25.5.2 实时天气界面25.5.3 未来天气界面25.5.4 选择城市界面25.5.5 版权信息及Logo设计25.6 数据处理25.6.1 天气实体类25.6.2 数据下载与解析25.6.3 Service服务26 系统测试及发布2总结2致谢2参考文献21 绪论1.1 研究背景3G时代的到来将我们的生活带入了更高层次的信息化时代,最突出的特点就是移动智能终端的迅速崛起,通信管道的畅通让我们能更加快捷方便的掌控信息,以智能手机为代表的移动智能终端时代已经拉开了帷幕。移动智能终端将深入到我们生活的各个方面,随之而来的就是巨大信息量的传递,人们今后的生活能够通过手中的移动终端来与世界发生各种联系,表现为具体的就是所提供的应用服务。而Android系统作为当下最流行的智能终端操作系统,由于其开放性和易操作性等特点,越来越受到人们的青睐,在正式推出两年后在市场占有率上就已经超越称霸十年的诺基亚Symbian系统,市场份额现已跃居全球第一。1.2 研究内容本课题研究了基于Android平台的天气软件开发。开发过程在Eclipse环境下进行,使用Java编程语言,通过Android技术的应用,结合来自中国气象局的天气数据,最终开发出基于Android平台的天气软件。实现效果为使用户在联网状态下查询目标地点实时天气状况以及未来几天内的天气状况。1.3 研究意义Android天气软件覆盖了全国2564个县级以上地区的详细天气状况,进一步扩大了气象信息的覆盖面,使人们能够随时随地获取需要的天气信息。天气的预测不仅可以为人们的日常生活提供更为合理的依据,而且能够起到预警的作用,将严重的自然灾害提前告知,以便提前预防,及时做出相应的安排,将灾害的损失降到最低。天气软件不仅能对人们的日常生活起到预测冷暖的作用,而且能够对自然灾害做出相应的预测,使科技更好的为人们服务。1.4 未来发展趋势根据市场调研公司Gartner的数据显示,截止到2011年第三季度,Android操作系统在全球智能手机操作系统中的份额已经过半,达到了52.5%,全球有一半的手机在使用Android操作系统。Android是一个以Linux为基础的开源操作系统,主要用于移动设备,由Google和开放手机联盟开发和领导。Android系统的开源性使其具有良好的拓展性,它不仅为开发者们提供了友好的开发平台,而且手机厂商可以依据自身的特殊需求开发出独有的功能。友好的开发平台、简单的操作界面以及众多软件的支持,使Android成为了越来越多用户的选择。Google表示,每天通过Google服务器激活的Android设备达到了55万台,并以每周4.4%的速度增长。正是因为Android具有的这些优势,使Android有了今天的成功。当然,Android平台现在还存在着一些问题,主要是秩序混乱,各家厂商开发不一致等问题,这些问题已经引起重视。Android还在不断壮大成长,相信随着系统的不断进步,Android将会更加强大,给用户带来更加完善的体验。2 系统分析2.1 可行性研究Android平台是基于Linux内核的操作系统,在该平台上的应用程序已经很多,开发流程已经很成熟。而且Android平台是开源的,所以开发的过程并不需要很大的成本,从官方网站上可以免费下载得到需要的软件,开发速度快,能在较短的周期内完成项目。现在世界上有一大半的智能终端在运行Android操作系统,而且正在被更多的用户们所接受,他们有着快速的学习能力,紧跟科技的进步,而且Android平台易于操作,对于用户来说是很容易上手的。通过学习,目前已经初步掌握了Android平台下应用程序开发的流程,并且对Java等相关技术的应用有一定经验。目前,正处于毕业设计阶段,时间和精力都比较充裕,电脑、网线等设备运行良好。综上所述,此软件在技术、经济、操作等方面是完全可行的。2.2 需求分析2.2.1 功能分析Android天气软件的功能主要为,获取天气数据并以友好的方式显示给用户,而且可以使用户可以根据自己的需要选择城市,查看未来天气等,因此,涉及到的功能模块主要有以下几个:1. 实时天气:当天的详细天气信息,主要有时间、温度、天气描述、风速、温馨提示等;2. 未来天气:简要列出未来几天内的天气信息,并且一目了然,使用户及时了解天气变化情况;3. 搜索城市:用户可以根据需要搜索全国县级以上所有城市,然后查看这个城市的天气情况;4. 设置默认:用户可以设置默认显示的城市信息;以上四个功能是系统需要实现的基本功能。2.2.2 用例分析系统的主要使用者是对于天气情况比较关心的广大用户,他们需要了解当下的详细天气数据,未来天气变化情况或者其他地方的天气情况,并且在需要的时候,对默认的城市进行更改等,这些是用户需要的功能。用例描述如图2.1:图2.1:系统用例图2.3 设计目标在集成的Eclipse开发环境中,依托中国气象局的气象数据,开发出基于Android平台的天气软件。通过这次的实践,了解Android应用程序设计和开发流程,以及用到的相关技术,掌握Android平台开发的基本原理,能够熟练的进行Android应用程序的开发。3 Android开发环境及平台搭建3.1 开发环境介绍图3.1:Android系统框架Android平台是以Linux为内核的操作系统,内核之外,则是中介层、数据库元和用CC+编写的API以及应用程序框架。Android上层的应用程序通常以Java语言编写,运行程序时,应用程序的代码会被即时转变为后缀为.dex的文件,然后Android操作系统通过使用即时编译的Dalvik虚拟机来将其运行。为此,Google重写了Java虚拟机,将其命名为Dalvik,以适用于Android平台应用程序的开发。Dalvik保留了Java虚拟机的核心功能,并在此基础上进行了优化,使编译过后的可执行程序(*.apk)以最小的内存优化文件,使其更适合于手机应用。由于Android平台上应用程序的开发主要使用Java语言,根据官方推荐,使用主流的开发工具Eclipse进行开发,在进行编程前还需要安装Java的开发工具包JDK。但是,这样仅仅能够编写Java应用程序,要编写Android应用程序,还要安装Android SDK,即Android开发工具包。最后,在Eclipse中集成环境中添加ADT(Android Development Tools),Android开发工具,方便开发Android应用程序。这样,就能够进行Android应用程序的开发了。3.2 平台搭建过程根据官方的指导,对Android平台的搭建过程简要介绍如下:1. Java SDK:下载JDK6.0并安装,官方网址为/technetwork/java/javase/downloads/index.html在系统设置环境变量JAVA_HOME、CLASS_PATH、PATH的值;2. Android SDK:在官方网站上下载最新的SDK进行安装,网址为/sdk/index.html,下载并解压后启动SDK Manager进行安装,选择需要的Android版本,然后更新,此次更新需要的时间较长,建议在晚上进行。最后,再将ADB命令所在的目录platform-tools的完整路径添加到系统的环境变量PATH中,这样,就能够在命令行中使用ADB命令了;3. ADT:由于在线安装容易遇到问题,这里选择下载后本地安装。同样是在上述官方网站页面,下载最新的ADT,存放在指定位置,稍后使用;4. Eclipse:建议选择Eclipse3.4以上版本,官方网址为/downloads/ ,解压缩后运行。选择 Help Install New Software Add ,然后在Name框中填写Android,在Location框中选择刚刚下载到的ADT文件的目录,然后点击 OK Finish Install All ,重启Eclipse。重启后选择 Window Preferences ,在Android选项的SDK Location框中选择下载得到的SDK目录,然后点击Apply OK 。这样,整个平台就搭建完成了。本项目所选择的各软件版本分别为:JDK6.0、ADT-15.0.0、android-sdk_r16-windows、eclipse-java-indigo-win32。4 程序设计4.1 整体设计从需求分析可以得知,系统流程设计如图4.1所示:图4.1:系统流程图 由图可知,在程序中与用户直接交互的是界面部分,而界面中的数据是通过从数据库中获取城市码,然后启动后台的数据操作服务得到的。下面,将对各个部分进行介绍。4.2 界面设计根据前面对系统的需求分析可以知道,系统大概需要四个界面,下面进行简要介绍: 加载页面:程序开始运行时加载的页面,显示应用程序欢迎信息,此时,软件进行基本的准备工作,如创建数据库、获取数据等操作;如图4.2:图4.2:加载界面草图实时天气页面:显示实时详细天气情况,主要包括城市名、温度、天气描述、风速、发布时间、温馨提示以及对应的图片等详细天气信息,还有是否默认为默认城市和未来天气按钮,当看到的城市是默认城市时,会提示这是默认城市,当不是默认城市时,这个区域会显示为设置默认按钮,点击可以设置为默认,下次运行程序后会直接显示默认城市信息;在这个页面中设置有菜单,在菜单中给出选择城市和退出选项;如图4.3:图4.3:实时天气界面草图未来天气页面:显示未来六天的天气信息,考虑到手机界面的原因,这里简要的给出未来每天的天气情况,主要给出天气变化情况,突出重点,使用户对未来天气信息一目了然;如图4.4:图4.4:未来天气界面草图选择城市页面:选择要查看的城市名称,然后搜索;这里可以搜索到全国所有县级以上城市和地区,总共2564个;当输入错误的时候,会给出提示,不存在该地名;搜索到这个城市后,在下方给出连接,点击后查看;如图4.5:图4.5:搜索界面草图在每个页面的下方还应显示有版权信息,内容为编写作者和所属组织,在最后将会统一加入到每个界面中的正下方。4.3 数据库设计经过分析,可以知道程序中至少需要设置两张表cities和city, 表cities用于存放全国所有城市名称和获取天气数据所对应的城市码,所以应该有两个字段存储它们,表city用于存放默认城市的代码,所以只有一个字段。经过了解,全国共有2564个县级以上城市,所以在cities表中共有2564条记录,而在city表中只有一条记录,表示如下:表4.1:cities字段名数据类型说明_idInteger主键codevarchar(10)城市码cityvarchar(10)城市名表4.2:city字段名数据类型说明_idInteger主键codevarchar(10)默认城市码5 系统实现5.1 文件结构介绍图5.1:文件结构图如图5.1所示,为项目中的文件目录结构。首先来介绍一下Android程序的系统目录:src目录是java文件的存放目录;res目录是资源文件存放的目录,其中,drawable文件夹中存放图片,layout文件夹中存放的是布局文件,values文件夹存放的是字符串文件,程序中显示的字符串信息都在这里设置。下面对主要文件进行介绍:R.java:可以理解为整个应用程序的字典,里面存放这大量的静态整型常量。这个文件是系统自动生成的,最好不要随意修改。应用程序中用到的字符串、图片、布局文件等等都可以在这里找到对应的id,在使用的时候直接引用对应的id即可;AndroidManifest.xml:全局配置文件,程序中的Activity、Service、Broadcast,还有权限声明和其他需要注册到Android系统中的等等应用,都需要在这里声明过后才能够正常使用;以上是对Android程序的目录设置做了一个大概的介绍,针对本项目,包的设置和文件的存放下面也给出详解:表5.1:包名介绍包的名称说明panda.weather存放了4个界面类panda.weather.data数据的下载和解析等操作panda.weather.databases数据库操作panda.weather.entity实体类panda.weather.service后台服务assets存放数据库文件res资源文件:图片、布局文件等5.2 相关技术介绍5.2.1 ActivityActivity是Android平台中非常重要的一个组件,是所有程序的根本,所有程序的流程都运行在Activity之中,是Android当中最基本的模块之一。每一个Activity代表着一个界面,它有自己的生命周期,即它的一个产生、运行、销毁的一个周期,对于Activity,关键是其生命周期的把握,其次就是状态的保护和恢复。这个过程官方给出了描述,如图5.2所示:图5.2:Activity生命周期每一个Activity本身是一个Java文件,在这个Java文件里有控件的设置和函数的操作等,但是页面的布局却不在Java文件中,而是一个xml文件,放在res目录的Layout文件夹中;每一个xml文件称为一个Layout布局文件,在对应的Java文件中设置应用的是哪个布局文件,每一个Activity对应一个布局文件。这里的布局类似于HTML中 CSS + DIV的设计模式,通过设置控件的属性改变控件的位置和显示效果,容易实现和调试。5.2.2 IntentIntent是将一个要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成Android各个组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及到的数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。Intent主要是用来启动其他Activity或者Service,所以可以将Intent理解成Activity之间的粘合剂。Intent的使用具体有以下3种形式:1. 通过startActivity方法来启动一个新的Activity;2. 通过Broadcast Intent 机制可以将一个Intent发送给任何对这个Intent反省去的BroadcastReceiver;3. 通过startService或者bindService方法来和后台的Service进行交互。5.2.3 Service Service也是Android系统中一种很重要的组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service执行的是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。Service可以再多场合的应用中使用。5.2.4 SQLiteSQLite数据库是Android平台内嵌的数据库,它是一个轻型的关系型数据,提供完整的对关系型数据库的操作,对SQLite的操作和其他关系型数据库类似,这里简要介绍一下。这里是在Windows平台下,首先打开已创建的Android虚拟设备,然后打开命令行提示符,输入 adb shell 命令,切换到Android平台下,进入到创建数据库的目录,然后输入命令 sqlite3数据库名,就可以打开对应的SQLite数据库。接下来就可以进行需要的操作了,不同的是,SQLite 的命令在前面都需要加上一个点,比如查看数据库中的表:. schema,查看表中所有数据:. select * from table; 等,其他命令与此类似。这里需要指出的是,在SQLite数据库的每张表中必须有一个字段是类似于 _id 的整型值,设置为主键,可自动插入,也可手动添加。有关SQLite数据库的内容就介绍到这里,更多的可以到帮助文档中查找。5.2.5 布局及控件介绍Android系统中界面布局方式有很多种,有线性布局、相对布局、表格布局等,布局文件以xml文件的形式存放在系统的资源文件夹中,这里只详细介绍程序中大量用到的线性布局。线性布局在代码中表示为Linearlayout,它是以线性的方式逐个显示在它内部声明的控件,布局的方向有垂直和水平两种,并且可以设置宽高等很多属性。在布局当中添加的是控件,下面是对一些常用控件的简单介绍:TextView:文本显示域,显示的信息内容为字符串形式;ImageView:图片显示域,显示的内容为图片;Button:按钮,可以设置响应的监听器,执行某种操作;EditText:输入文本框,为用户提供输入数据的接口;控件中的属性有很多,大体上是类似的,也有个别属性是特有的,这里不再详细介绍,在用到的时候可以查阅相关文档。这里需要指出的是,不论是控件还是资源文件,在应用程序中用到的时候,都是通过R.java中的整型值引用的,然后进行对对象进行操作。5.3 城市码获取软件中用到的天气数据来自于中国气象局,这个数据源是免费的,它提供了全国2564个县级以上城市的天气信息,每一个城市对应一个城市码。在获取某一城市的天气数据的时候,就是依据这个城市的城市码向服务器发送请求,然后得到对应的天气数据后返回,在界面中显示给用户,所有城市的天气数据的获取都依赖于对应的城市码,所以得到所有的城市名及其城市码就是重中之重的事情。获取城市及其城市码的地址是/data5/ ,后面加上city.xml得到省份编号,然后跟上省份编号得到地区编号,再用省份编号+地区编号就可以得到这个地区中所有城市的编号,最后把省份编号+地区编号+城市编号得到的就是城市对应的城市码,通过链接 /data/城市码.html就可以获取这个城市的所有天气数据。这里写了一个程序来获取这些数据。这个程序通过遍历来得到所有的城市信息。首先下载得到包含城市信息的文本内容,然后再解析这个文本得到城市和编号。遍历全部数据后,把结果保存起来。创建连接,然后读入数据,最后将得到的内容以字符串的形式返回。下载函数如下:public static String getInfo(String url) BufferedReader in = null;String info = ;try URL file;file = new URL(url);in = new BufferedReader(new InputStreamReader(file.openStream();String line;while (line = in.readLine() != null) info = info + line;in.close(); catch (Exception e) e.printStackTrace();return info;每次得到的下载内容包含的是一组数据,这组数据包含很多小组数据,每小组数据用一个“,”分割,在每小组数据中有城市名和城市编号,它们之间又用一个“|”分割,对这组内容进行解析后得到一个包含城市名和城市编号的二维数组,解析函数如下:public static String parseCity(String content)if(content!=null & content.trim().length()!=0)StringTokenizer st = new StringTokenizer(content, ,);int count = st.countTokens();String citys = new Stringcount2;int i = 0;int index = 0;while(st.hasMoreTokens()String city = st.nextToken();index = city.indexOf(|);citysi0 = city.substring(0, index);citysi1 = city.substring(index + 1);i = i + 1;return citys;return null;上面介绍的是下载函数和解析函数。具体的获取过程通过不断的修改链接地址并调用这两个函数,最后就能够获取全部的数据,最后以文本的形式暂时存储起来。遍历函数代码如下:public void doIt() int init = 0;String webContent;String urlPre = /data5/city;/ httpDownloader.download(/data5/city.xml);/ 得到省份或一级直辖市代码 代码名称webContent = GetInfo.getInfo(urlPre + .xml);String provinces = WeaterInfoParser.parseCity(webContent);String groups = new Stringprovinces.length;String childs = new Stringprovinces.length;String cityCode = new Stringprovinces.length;/ 开始遍历for (int i = 0; i /data5/city + 01 +.xmlStringBuffer urlBuilder = new StringBuffer(urlPre);urlBuilder.append(provincesi0);urlBuilder.append(.xml);/ 得到指定省份或直辖市信息内容webContent = GetInfo.getInfo(urlBuilder.toString();/ 一个省份内的城市信息String citys = WeaterInfoParser.parseCity(webContent);String towns = new Stringcitys.length;/ 计算总的城镇数int sum = 0;for (int j = 0; j /data5/city + 0102 +.xmlurlBuilder = new StringBuffer(urlPre);urlBuilder.append(citysj0);urlBuilder.append(.xml);/ 得到地方信息webContent = GetInfo.getInfo(urlBuilder.toString();/ towns 是一个二维数组 ,因为town是三维数组townsj = WeaterInfoParser.parseCity(webContent);sum = sum + townsj.length;childsi = new Stringsum;cityCodei = new Stringsum;sum = 0;for (int j = 0; j citys.length; j+) / townj.length 是一个省份内有多少个城市信息for (int n = 0; n townsj.length; n+) childsisum = townsjn1;/ /data5/city + 010203 + .xmlurlBuilder = new StringBuffer(urlPre);urlBuilder.append(townsjn0);urlBuilder.append(.xml);webContent = GetInfo.getInfo(urlBuilder.toString();String code = WeaterInfoParser.parseCity(webContent);cityCodeisum = code01;sum = sum + 1;init = init + sum;urlBuilder = null;System.out.println(中国一共有多少个地方: + init);/ 这里得到的groups数组记录的是得到的34个一级地区字符串,/ childs记录的是与groups数组对应的一级地区对应的市级别的字符串名int g = 0;StringBuffer str = new StringBuffer();for (int j = 0; j childs.length; j+) for (int k = 0; k childsj.length; k+) / infog0 = childsjk;str.append(childsjk + ,);System.out.println(childsjk);g+;File file = new File(city.txt);try FileOperation.writeTxtFile(str.toString(), file); catch (Exception e) e.printStackTrace();g = 0;str = new StringBuffer();System.out.println(g2 = + g);for (int j = 0; j cityCode.length; j+) for (int i = 0; i cityCodej.length; i+) str.append(cityCodeji + ,);System.out.print(cityCodeji);g+;System.out.println();File file2 = new File(cityCode.txt);try FileOperation.writeTxtFile(str.toString(), file2); catch (Exception e) e.printStackTrace();遍历后将得到的数据分别存放在 city.txt 和 cityCode.txt两个文件中。在 city.txt 中存放的是所有的城市名,城市名之间用“,”分隔,在cityCode.txt中存放的是所有城市的城市码,之间也用“,”隔开,在存放的时候,将城市名和城市码的次序一一对应。写入函数如下:public static boolean writeTxtFile(String content, File fileName)throws Exception RandomAccessFile mm = null;boolean flag = false;FileOutputStream o = null;try o = new FileOutputStream(fileName);o.write(content.getBytes(UTF-8);o.close();flag = true; catch (Exception e) e.printStackTrace(); finally if (mm != null) mm.close();return flag;这样,整个数据的获取就完成了,得到的城市名和城市码分别保存在 city.txt 和 cityCode.txt 两个文件中。5.4 数据库实现5.4.1 数据库存储在数据库的设计中将数据内容设计为两张表:cities和city,cities用于存储城市名和城市码,city用于存储默认的城市码。首先来实现cities这张表,也就是将上面获取数据后得到的两个文件中的内容存储到这张表中来。经过分析可以知道,应该先将文件中的内容读入到内存中,然后创建表,再把数据插入到表中。在前面已经说过,在两个文件存储的时候,城市名和城市名之间、城市码和城市码之间用“,”作为间隔,所以读入后,应以它作为分隔符来进行解析,解析函数如下:public static String parseCity(String content)if(content!=null & content.trim().length()!=0)StringTokenizer st = new StringTokenizer(content, ,);String it = new String2564;int i = 0;while(st.hasMoreTokens()String city = st.nextToken();iti = city;i = i + 1;return it;return null;将两个文件分别解析后,得到的是两个字符串数组,这里需要注意的是,两个数组中的城市名和城市码之间是一一对应的。所以接下来要将它们组合起来,得到一个二维数组,一个城市名对应一个城市码,共2564个城市,代码如下:public static String range(String city, String code)String str = new String25642;for (int i = 0; i str.length; i+) stri0 = codei;stri1 = cityi;return str;这样,就得到了一个包含着城市名和城市码的二维数组,然后就是创建数据库,创建表,将数据插入到表中。在SQLite中对数据库操作要首先获得一个 SQLiteOpenHelper 对象,但是这个类是一个抽象类,需要创建一个类去实现它,然后继承它的方法,这里给出一个简单的实现类:public class DatabaseHelper extends SQLiteOpenHelper private static final int VERSION = 1;public DatabaseHelper(Context context, String name, CursorFactory factory,int version) super(context, name, factory, version);public DatabaseHelper(Context context, String name, int version)this(context, name, null, version);public DatabaseHelper(Context context, String name)this(context, name, VERSION);public void onCreate(SQLiteDatabase db) public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 继承后要实现的有 onCreate 和 onUpgrade 两个方法。得到SQLiteOpenHelper 对象后就可以创建数据库了。这里介绍两个方法: getReadableDatabase 和getWritableDatabase ,由字面意思我们就可以理解他们的含义:获得一个可读的数据库和获得一个可写的数据库。针对不同的操作选用不同的方法,当数据库不存在的时候,直接创建这个数据库。所以,要创建一个数据库的时候直接调用它们即可,代码如下:class CreateDatabaseListener implements OnClickListener public void onClick(View arg0) DatabaseHelper dbHelper = new DatabaseHelper(SqliteActivity.this,panda_weather);dbHelper.getReadableDatabase();创建的过程是在一个监听器里实现的,这里不再过多介绍。有了数据库就该创建表了,语句如下:db.execSQL(create table cities(_id int, code varchar(10), city varchar(10);接下来是插入数据。在上面已经将要插入的数据存入到了一个二维数组中,在插入的时候考虑到乱码问题,特别设置了编码方式为 UTF-8 编码,然后逐条插入,代码如下:class InsertListener implements OnClickListener public void onClick(View v) DatabaseHelper dbHelper = new DatabaseHelper(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论