Android 获取Google Weather API 并通过Xml和JSON解析数据

设计如下:通过JsonDemoActivity输入国家简称,跳转到CityListActivity(用来显示城市列表),点击需要查询城市返回天气信息。在JsonDemoActivity显示天气信息,Utils是解析天气和城市的主要工具类。

知识点:

1、多个Activity之间传递数据(一般Activity之间用来传递的是基本的数据类型,比如说String,int,boolean等),其中有个方法,可以用来传递对象,我就是讲城市和天气信息写成相应的JavaBean,用来传递的;

2、Json数据解析,获取城市;

3、解析Xml数据,获取天气;

4、部分Google API的讲解;

5、解析图片。

(关于google wearher api 的说明在:http://tsov.net/weather-queries-using-the-google-weather-api/

结构如下:

以下是效果图:

(国家列表)

(城市列表)

(天气情况)

主要代码(代码不做多余解释自己看吧):

一、获取数据

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. /**
  2. *得到数据
  3. *@paramargs
  4. *@return
  5. */
  6. publicfinalstaticInputStreamgetStream(Stringargs){
  7. InputStreamstream=null;
  8. DefaultHttpClientclient=newDefaultHttpClient();
  9. HttpGetget=newHttpGet(args);
  10. try{
  11. HttpResponseresponse=client.execute(get);
  12. if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  13. HttpEntityentity=response.getEntity();
  14. stream=entity.getContent();
  15. }
  16. returnstream;
  17. }catch(Exceptione){
  18. e.printStackTrace();
  19. returnstream;
  20. }
  21. }

二、解析天气

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. /**
  2. *通过解析xml数据得到天气信息
  3. *@paramargs
  4. *@return
  5. */
  6. publicstaticWeatherBeangetCurrentWeather(Stringargs){
  7. Documentdocument=null;
  8. try{
  9. DocumentBuilderbuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
  10. document=builder.parse(newInputSource(getStream(args)));
  11. }catch(ParserConfigurationExceptione){
  12. e.printStackTrace();
  13. }catch(FactoryConfigurationErrore){
  14. e.printStackTrace();
  15. }catch(SAXExceptione){
  16. e.printStackTrace();
  17. }catch(IOExceptione){
  18. e.printStackTrace();
  19. }
  20. //当天天气
  21. WeatherBeanweather=newWeatherBean();
  22. NodeListnodeList=document.getElementsByTagName("current_conditions").item(0).getChildNodes();//当前天气
  23. Stringcondition=nodeList.item(0).getAttributes().item(0).getNodeValue();//天气情况
  24. StringtempF=nodeList.item(1).getAttributes().item(0).getNodeValue();//华氏度
  25. StringtempC=nodeList.item(2).getAttributes().item(0).getNodeValue();//摄氏度
  26. Stringhumidity=nodeList.item(3).getAttributes().item(0).getNodeValue();//湿度
  27. StringimgUrl=nodeList.item(4).getAttributes().item(0).getNodeValue();//天气图片
  28. StringwindCondition=nodeList.item(5).getAttributes().item(0).getNodeValue();//风速描述
  29. weather.setCondition(condition);
  30. weather.setTempF(Integer.parseInt(tempF));
  31. weather.setTempC(Integer.parseInt(tempC));
  32. weather.setHumidity(humidity);
  33. //weather.setIcon(reDrawable(imgUrl));//解析图片
  34. weather.setWindCondition(windCondition);
  35. returnweather;
  36. }

三、Google返回的Json数据,用Json解析城市

  1. /**
  2. *通过Android提供的Json方式解析城市信息
  3. *@paramcountryCode
  4. *@return
  5. */
  6. publicstaticList<CityBean>getCityInfos(StringcountryCode){
  7. List<CityBean>cityList=newArrayList<CityBean>();
  8. //
  9. StringBuildersBuilder=newStringBuilder();
  10. BufferedReaderbReader=newBufferedReader(newInputStreamReader(getStream(countryCode)));
  11. try{
  12. for(Strings=bReader.readLine();s!=null;s=bReader.readLine()){
  13. sBuilder.append(s);
  14. }
  15. }catch(IOExceptione){
  16. e.printStackTrace();
  17. }
  18. try{
  19. JSONObjectjsonObject=newJSONObject(sBuilder.toString());
  20. JSONArrayjsonArray=jsonObject.getJSONArray("cities");
  21. for(inti=0;i<jsonArray.length();i++){
  22. CityBeancityBean=newCityBean();
  23. JSONObjectjsonObj=(JSONObject)jsonArray.opt(i);
  24. cityBean.setCityName(jsonObj.getString("name"));
  25. cityBean.setLat(jsonObj.getLong("lat"));
  26. cityBean.setLon(jsonObj.getLong("lon"));
  27. cityList.add(cityBean);
  28. Log.i(TAG,"name="+jsonObj.getString("name")+";lat="+jsonObj.getLong("lat")+";lon="+jsonObj.getLong("lon"));
  29. }
  30. }catch(JSONExceptione){
  31. e.printStackTrace();
  32. }
  33. returncityList;
  34. }

我这里只是通过经纬度查询城市天气预报。也可以通过其他的方式,具体的请看上面那个链接。

Demo下载地址:http://download.csdn.net/source/3339328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值