使用SAX解析XML利用Google Weather服务制作天气预报异常解决办法
来源:互联网 发布:一千零一夜 淘宝 视频 编辑:程序博客网 时间:2024/06/06 00:28
通过浏览器访问下面的链接:
http://www.google.com/ig/api?weather=nanchang 或http://www.google.com/ig/api?hl=zh-cn&weather=nanchang
http://www.google.com/ig/api?hl=en&weather=nanchang
http://www.google.com/ig/api?hl=zh-tw&weather=nanchang
可以分别获得Google Weather API服务提供某个城市的天气信息(简体中文,英文,繁体中文),然后利用SAX解析XML即可取得所包含的数据。
在《深入浅出Google Android》,《Android核心技术与实例详解》中都有天气预报实例讲解,在此只是列出主要思路代码。
新建继承自DefaultHandler的类WeatherHandler,该类主要功能是对XML文件中的内在进行提取。
Activity类按钮主要代码如下:
try{
String urlStr = "http://www.google.com/ig/api?weather=" + sCity;
urlStr = urlStr.replace(" ", "%20"); //替换空格为 %20
URL weatherUrl = new URL(urlStr);
SAXParserFactory sf = SAXParserFactory.newInstance(); //创建SAXParserFactory对象
SAXParser sp = sf.newSAXParser(); //创建SAXParser对象
XMLReader xr = sp.getXMLReader(); //获得XMLReader对象
WeatherHandler wh = new WeatherHandler(); //创建解析XML内容的WeatherHandler对象
xr.setContentHandler(wh);
xr.parse(new InputSource(weatherUrl.openStream())); //解析XML文件
StringBuilder sb = new StringBuilder();
sb.append(wh.getMain_condition());
sb.append("\n");
sb.append(wh.getTemprature());
sb.append("\n");
sb.append(wh.getHumidity());
sb.append("\n");
sb.append(wh.getWind());
TextView tv = (TextView)findViewById(R.id.tvResult);
tv.setText(sb.toString());
URL iconUrl = new URL("http://www.google.com"+wh.getIcon()); //生成图片路径
URLConnection con = iconUrl.openConnection();
InputStream in = con.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(in);
ImageView iv = (ImageView)findViewById(R.id.ivResult); //获得ImageView对象
iv.setImageBitmap(bmp);
}
catch(Exception e){
Log.e("URL_PParse_ERROR", e.toString());
}
最终程序运行如下图:
在开发过程中可能会遇到如下问题
1,android.os.NetworkOnMainThreadException异常
该异常是由于在主线程中做了网络操作。在3.0的版本上访问网络不能在主线程内,要不就抛异常,必须自己写一个thread,把代码写进thread里面。或者在主Activity类的OnCreate方法中添加如下代码:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
2,java.net.UnknownHostException异常
这是由于AndroidMainifest.xml中未加入INTERNET权限引起的,代码如下:
<uses-permission android:name="android.permission.INTERNET"/>
3,org.apache.harmony.xml.expatParser$ParseException异常
在该应用中若想获得中文信息,可能会把String urlStr = "http://www.google.com/ig/api?weather=" + sCity;修改为:
String urlStr = "http://www.google.com/ig/api?hl=zh-cn&weather=" + sCity;,然而解析时出现异常。可以考虑自己编程开发相应的字符串替换方法对返回的英文信息进行翻译。
4,Project Build Target不拘泥于Standard Android platform 4.0或Android+Google APIs
虚拟机在这两个平台都能正常运行。
- 使用SAX解析XML利用Google Weather服务制作天气预报异常解决办法
- 使用Google Weather API 制作天气预报应用
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- 使用Google Weather API查询天气预报
- Google Weather API返回XML的SAX和DOM解析当中遇到的问题及解决
- sax解析xml异常
- android利用SAX解析xml(以解析谷歌天气预报xml预报为例)
- 利用SAX解析XML
- 利用dom4j解析xml--天气预报
- 如何成为一个C++高级程序员
- 有些文件或文件无法删除怎么办?
- Myxls组件导入导出Excel(不需安装Excel)
- mini2440 qt4 移植
- ACE_Message_Block功能简介
- 使用SAX解析XML利用Google Weather服务制作天气预报异常解决办法
- 先进的仓库管理模式
- Android的SD卡文件读写
- PHP发送邮箱类及应用
- C#生成Excel报表 用MyXls组件生成更完美
- 包的设计原则
- EF Code-First 自定义表映射
- Entity Framework 4.1 之一 : 基础
- ServletConfig和ServletContext