天气预报app---教程二

第二部分就是选择城市,然后获得数据这一块了。

首先全国城市很多,我们肯定不能在程序里写个数组之类的存着,所以我们应该下载个全国城市xml的数据,然后放在Android assents目录下,然后解析xml得到省份和城市。这里我选择了SAX解析。

 SAXParser saxParser=SAXParserFactory.newInstance().newSAXParser();
            saxParser.parse(getResources().getAssets().open("citys.xml"),myHandler);

通过assents目录打开一个流,然后用sax解析的核心函数。

通过sax解析,我们就能得到省份和城市 这里我用hashmap存储了map{{省份},{ArrayList<city>}}。这样省份下的城市我们就可以直接取出,方便后面一个选择省份后出现对应的城市,形成一个listvie的联动

public class MyHandler extends DefaultHandler{
    public ArrayList provice=new ArrayList();
    public ArrayList item=new ArrayList();
    public HashMap<String,ArrayList> items=new HashMap();
    String beginstring="";
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        if ("province".equals(localName)){
            provice.add(attributes.getValue(0));
            beginstring=attributes.getValue(0);
        }
    }
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        String temp=new String(ch,start,length);
        if (!temp.trim().equals("")&&!temp.trim().equals("\n")){
            item.add(temp);
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if ("province".equals(localName)) {
            items.put(beginstring, item);
            item = new ArrayList();
        }
    }
}

上面是sax解析的方法实现。现在我们还缺一些东西,第一个就是点击按钮以后调到下一个界面去选择城市,然后返回城市,显示天气。第二个就是保存城市,下次默认加载。

第一个问题比较简单startActivityForResult,这个方法就可以解决问题,第二个就是保存文件时,要注意有的手机可能没有外置存储卡,所以我们最好是把文件放在应用程序对应的目录下,android下自带的openFileOutput()和openFileInput()方法就可以解决这个问题

时间: 2024-12-10 15:32:27

天气预报app---教程二的相关文章

用Swift实现一款天气预报APP(二)

上篇中主要讲了界面的一些内容,这篇主要讨论网络请求,获得天气的数据.具体的说是HTTP请求天气站点的API,得到返回的JSON数据.解析这些数据,并更新到界面内容中. 让用户知道当前的和之后几个小时的天气状况. 发起HTTP请求主要用到的是SDK的NSURLSession这个类,使用这个类对象可以创建请求任务并在这个任务中处理请求之后由服务器返回的JSON数据.在NSURLSession之前主要用到的是NSURLConnection.这两个类比较类似.只是在NSURLSession中增加了后台执

用Swift实现一款天气预报APP(三)

这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 通过前面的学习,一个天气预报的APP已经基本可用了.至少可以查看现在当前的天气情况和未来几个小时的天气预报了.但是,还不够完善.如果用户想要知道他要去的地方的天气怎么办.明显我们的APP在目前来说无法满足用户的这个需求.而我们的APP需要获取其他城市的天气却非常的简单.通过查看天气的API,发现只要把城市的名称作为参数就可以获得当地城市的天气预报.API

用Swift实现一款天气预报APP(一)

Swift作为现在苹果极力推广的语言,发展的非常快.这个语言就和她的名字一样,比OC减少了很多的文件和代码量.头文件,bye bye啦,再不用查个代码上下的头文件源文件切换了.而且语言本身也增加了很多的安全性的考虑,比如类的初始化个阶段的检查等.不按照规定的写就不能编译通过!本文假定你有一定的编程基础,和一定的Swift基础.如果木有的话,请看这里迅速补起. 本文就用Swif写一个APP,让各位一起来体会一下Swift到底是好在了哪里.为了简单,教程会使用Storyboard,而不是手动的添加C

HBuilder开发App教程01-推开前端开发App的大门

奇妙的前端,奇妙的js 众所周知,自从js有nodejs后,前端人员可以华丽的转身,去开发高并发非阻塞的服务端程序, 随着html5的出现,伴随一些amazing的特性,h5开发app的技术越发的成熟, 自从2008年国外推出phonegap后,前端人员又踏上开发app的路程, 今年来国内也对应推出了一些可以让前端人员开发app的ide, 不过大部分是收费的,强定制的,这里就不一一列举了. 这里推荐DCloud推出的HBuilder,一句话谁用谁知道. 一次开发两种app 通过HBuilder的

HBuilder开发App教程09-侧滑菜单

侧滑菜单 功能 上节讲到了列表页,这节讲一个比较常用的功能,侧滑菜单, 在本app中策划菜单用来记录已经完成的事项. 实现方式 用Hbuilder实现类似侧滑菜单这样原生app功能,一般有两种实现方式,详见:这里. 一是webview实现,二是div模拟实现, 两者的区别是div实现简答,但是偶尔效果不是很好, 而webview实现稍微复杂,页面传值也复杂,但是效果好点,一般推荐webview实现方式. index.html 代码 index.js中需要添加如下代码, var main = nu

DataVeryLite入门教程(二) Entity篇

DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. 最好先阅读DataVeryLite入门教程(一) 配置篇,然后再阅读本篇.如果你觉得麻烦也可以跳过. Entity是ORM中的核心对象之一,一个继承Entity的对象对应于数据库中的一个表. Entity提供丰富的API对表中的单条数据进行操作. 比如根据id或其他条件,加载,删除,插入,更新和部分

HBuilder开发App教程02-环境搭建,HelloWorld以及真机调试

环境搭建 前言 用HBuilder做开发,其实可以说是最简单的一种环境搭建了,甚至可以说没有环境需要搭建, 想想android开发的时候,相当痛苦,下载各种sdk,而且都需要翻墙,苦不堪言. 用HBuilder做开发,只需要基础的java环境,其余的android和ios环境统统不需要. HBuilder可以做到这一点,是因为: 1.将打包放到的云端,免去了本地搭建环境进行打包的痛苦, 2.将调试直接设置为真机调试,免去了各种模拟器调试的痛苦. java环境 只需要最基础的java环境,也就是c

Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!

分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloaderencoding 大家好,相信大家用的ListView控件一定很多的,是竖向滑动的,复用convertView,我们可以加载成千上万的数据,但有时候我们会有 这个需求比如相册,我们想横向滑动,并且数据有好多,这时候ViewPager控件就派上用场了,ViewPager使用时候我们需要导入第三方包 an

Laravel教程 二:路由,视图,控制器工作流程

Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel的神奇世界了,主要是讲解Laravel的Router,Views,Controllers的工作流程,目的也就是让大家明白Laravel在处理一个get请求的时候是如何工作的. 在开始之前,我们首先得将我们的服务器启动起来,如果你使用Laravel的artisan,你可以直接: p

Android简易版天气预报app的实现(改进版)

最近总是有人来和我说我以前写的一个小app无法正常获取数据~Android简易版天气预报app 今天就又运行了下来查找问题,发现或许是接口有限制吧,不能在多台手机使用同个apikey 然后,发现了我写的代码实在乱七八糟,界面也实在不好看,就又重写了一遍,小小地修改了一遍,开发环境改为了Android Studio 最终效果图如下 工程图如下 一.获取地区信息 做这么一个天气预报app,首先就要获取到国内地区列表 (在我的另一篇博客有介绍:向任意网址发起数据请求) 中国天气网开放有天气预报接口,访