首页 > 代码库 > 天气预报app---教程二
天气预报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()方法就可以解决这个问题
天气预报app---教程二
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。