Android 用Pull解析XML方法解析谷歌天气

简介:

解析类:

package com.lzx.weather;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.util.Log;

public class WeatherModel {

	public static WeatherCurrentCondition curCondition = null;
	public static List<WeatherForecastCondition> forecastList = null;
	URL mUrl;
	public WeatherModel(URL url){
		this.mUrl = url;
		initData(mUrl);
	}
	
	public void initData(URL url){
		try {
			InputStream is = null;
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			is = conn.getInputStream();
			if(is != null){
				XmlPullParserFactory factory = XmlPullParserFactory.newInstance();    
				XmlPullParser parser = factory.newPullParser(); //      XmlPullParser parser = Xml.newPullParser();用这个解析不出来,值得注意

				parser.setInput(is, "GBK");
				WeatherForecastCondition forecastCondition = null;
				int eventType = parser.getEventType();
				Log.d("lzx", "eventType=" + eventType);
				while(eventType != XmlPullParser.END_DOCUMENT){
					switch (eventType) { 
					case XmlPullParser.START_DOCUMENT:
						Log.d("lzx", "START_DOCUMENT=" + parser.getName());
						forecastList = new ArrayList<WeatherForecastCondition>();
						break;
					case XmlPullParser.START_TAG:
						String name = parser.getName(); 
//						if("weather".equals(name)){
//							Log.d("lzx", "START_TAG=" + name);
//						}
						
						if("forecast_conditions".equals(name)){
							Log.d("lzx", "START_TAG=" + name);
							forecastCondition = new WeatherForecastCondition();
						}else if(forecastCondition != null){
							if("day_of_week".equals(name)){
								forecastCondition.day_of_week = parser.getAttributeValue(0);
							}
							if("low".equals(name)){
								forecastCondition.low = parser.getAttributeValue(0);
							}
							if("high".equals(name)){
								forecastCondition.high = parser.getAttributeValue(0);
							}
							if("icon".equals(name)){
								forecastCondition.icon = parser.getAttributeValue(0);
							}
							if("condition".equals(name)){
								forecastCondition.condition = parser.getAttributeValue(0);
							}
						}
						
						if("current_conditions".equals(name)){
							Log.d("lzx", "START_TAG=" + name);
							curCondition = new WeatherCurrentCondition();
						}else if(curCondition != null){
							if("condition".equals(name)){
								Log.d("lzx", "condition=" + parser.getAttributeValue(0));
								curCondition.condition = parser.getAttributeValue(0);
							}
							if("temp_f".equals(name)){
								curCondition.temp_fahrenheit = parser.getAttributeValue(0);
							}
							if("temp_c".equals(name)){
								curCondition.temp_celcius = parser.getAttributeValue(0);
							}
							if("humidity".equals(name)){
								curCondition.humidity = parser.getAttributeValue(0);
							}
							if("icon".equals(name)){
								curCondition.icon = parser.getAttributeValue(0);
							}
							if("wind_condition".equals(name)){
								curCondition.wind_condition = parser.getAttributeValue(0);
							} 
						}
						
						
						break; 
					
					case XmlPullParser.END_TAG:
						if("forecast_conditions".equals(parser.getName())){
							Log.d("lzx", "END_TAG=" + parser.getName());
							if(forecastList != null && forecastCondition != null){
								forecastList.add(forecastCondition);
								Log.d("lzx", "forecastList size=" + forecastList.size());
							}
							forecastCondition = null;
							
						}
						break;
					}
					eventType = parser.next();
				}
				Log.d("lzx", "curCondition--" + curCondition);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
}

WeatherCurrentCondition.java

package com.lzx.weather;

public class WeatherCurrentCondition {

	public String	condition;			// 多云
	public String	temp_celcius;		// 摄氏温度
	public String	temp_fahrenheit;	// 华氏温度
	public String	humidity;			// 湿度:58%
	public String	wind_condition;		// 风向...
	public String	icon;				// 图标
	
	//得到一个封装打包的字符串,包括除icno外的所有东西
	public String toString()
	{
		StringBuilder sb = new StringBuilder();
		sb.append("实时天气: ").append(temp_celcius).append(" °C");
		sb.append(" ").append(temp_fahrenheit).append(" F");
		sb.append(" ").append(condition);
		sb.append(" ").append(humidity);
		sb.append(" ").append(wind_condition);
		return sb.toString();
	}
}

WeatherForecastCondition.java

package com.lzx.weather;

public class WeatherForecastCondition {

	public String day_of_week;		//星期
	public String low;				//最低温度
	public String high;			//最高温度
	public String icon;			//图标
	public String condition;		//提示
	
	public String toString()
	{
		StringBuilder sb = new StringBuilder();

		sb.append(" ").append(day_of_week);
		sb.append(" : ").append(high);
		sb.append("/").append(low).append(" °C");
		sb.append(" ").append(condition);
		return sb.toString();
	}
}


相关文章
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
3072 1
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
12月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
339 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
525 15
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
安全 Java Linux
深入解析Android系统架构及其对开发者的意义####
【10月更文挑战第21天】 本文旨在为读者揭开Android操作系统架构的神秘面纱,探讨其如何塑造现代移动应用开发格局。通过剖析Linux内核、硬件抽象层、运行时环境及应用程序框架等关键组件,揭示Android平台的强大功能与灵活性。文章强调了理解Android架构对于开发者优化应用性能、提升用户体验的重要性,并展望了未来技术趋势下Android的发展方向。 ####
568 0
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
360 1

推荐镜像

更多
  • DNS