`

XML解析实例--------获得天气预报数据

 
阅读更多
XML解析实例--------获得天气预报数据

运行效果图:
[img]

[/img]

工程结构图:
[img]

[/img]

一、MainActivity:
package com.amaker.flipper;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ListActivity {
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		/*setContentView(R.layout.main);
		String str = getWeatherAsString();
		Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();*/
		setListAdapter(new MyAdpter(MainActivity.this));
	}

	private static class MyAdpter extends BaseAdapter {
		List<Weather> list;
		LayoutInflater inflater;
		public MyAdpter(Context context) {
			list = readXml();
			inflater = LayoutInflater.from(context);
		}

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int arg0) {
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			InputStream in = null;
			Weather w = list.get(position);
			String icon = w.getIcon();
			String iconUrl = "http://www.google.com"+icon;
			try {
				URL url = new URL(iconUrl);
				try {
					in = url.openStream();
				} catch (IOException e) {
					e.printStackTrace();
				}
			} catch (MalformedURLException e) {
				e.printStackTrace();
			}
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.list_item, null);
				holder = new ViewHolder();
				holder.icon = (ImageView) convertView
						.findViewById(R.id.icon_imageView1);
				holder.week_tv = (TextView) convertView
						.findViewById(R.id.week_textView1);
				holder.condition_tv = (TextView) convertView
						.findViewById(R.id.condition_textView2);
				holder.low_tv = (TextView) convertView
						.findViewById(R.id.low_textView3);
				holder.high_tv = (TextView) convertView
						.findViewById(R.id.high_textView4);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.icon.setImageBitmap(BitmapFactory.decodeStream(in));
			holder.week_tv.setText(w.getWeek());
			holder.condition_tv.setText(w.getCondition());
			holder.low_tv.setText(w.getLow()+"");
			holder.high_tv.setText(w.getHight()+"");
			return convertView;

		}

		static class ViewHolder {
			ImageView icon;
			TextView week_tv;
			TextView condition_tv;
			TextView low_tv;
			TextView high_tv;
		}

	}

	static List<Weather> readXml() {
		SAXParserFactory factory = SAXParserFactory.newInstance();
		try {
			SAXParser parser = factory.newSAXParser();
			InputSource is = null;
			is = new InputSource(new StringReader(getWeatherAsString()));
			MyHandler dh = new MyHandler();
			try {
				parser.parse(is, dh);
				return dh.list();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}
		return null;
	}

	// 得到天气情况的xml
	public static String getWeatherAsString() {
		String strUrl = "http://www.google.com/ig/api?hl=zh-cn&weather=Beijing";
		HttpGet getRequest = new HttpGet(strUrl);
		DefaultHttpClient client = new DefaultHttpClient();
		try {
			HttpResponse response = client.execute(getRequest);
			if (response.getStatusLine().getStatusCode() == 200) {
				HttpEntity entity = response.getEntity();
				return EntityUtils.toString(entity);
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}



二、MyHandler
package com.amaker.flipper;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler {
	List<Weather> list;
	Weather currentWeather;
	
	public List<Weather> list(){
		return list;
	}
	@Override
	public void startDocument() throws SAXException {
		super.startDocument();
		list = new ArrayList<Weather>();
	}
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		super.startElement(uri, localName, qName, attributes);
		if(qName!=null&&qName.equals("forecast_conditions")){
			currentWeather = new Weather();
		}
		if(qName!=null&&qName.equals("day_of_week")){
			String week = attributes.getValue("data");
			if(currentWeather!=null){
				currentWeather.setWeek(week);
			}
			
		}
		if(qName!=null&&qName.equals("low")){
			int low = Integer.parseInt(attributes.getValue("data"));
			if(currentWeather!=null){
				currentWeather.setLow(low);
			}
			
		}
		if(qName!=null&&qName.equals("high")){
			int hight = Integer.parseInt(attributes.getValue("data"));
			if(currentWeather!=null){
				currentWeather.setHight(hight);
			}
			
		}
		if(qName!=null&&qName.equals("icon")){
			String icon = attributes.getValue("data");
			if(currentWeather!=null){
				currentWeather.setIcon(icon);
			}	
			
		}
		if(qName!=null&&qName.equals("condition")){
			String condition = attributes.getValue("data");
			if(currentWeather!=null){
				currentWeather.setCondition(condition);
			}
			
			
		}
		
	}
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);
	}
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		super.endElement(uri, localName, qName);
		if(qName!=null&&qName.equals("forecast_conditions")){
			list.add(currentWeather);
		}
	}
	@Override
	public void endDocument() throws SAXException {
		super.endDocument();
	}
}



三、Weather:
package com.amaker.flipper;

public class Weather {
	private String week;
	private int low;
	private int hight;
	private String icon;
	private String condition;
	
	
	
	@Override
	public String toString() {
		return "Weather [condition=" + condition + ", hight=" + hight
				+ ", icon=" + icon + ", low=" + low + ", week=" + week + "]";
	}
	public String getWeek() {
		return week;
	}
	public void setWeek(String week) {
		this.week = week;
	}
	public int getLow() {
		return low;
	}
	public void setLow(int low) {
		this.low = low;
	}
	public int getHight() {
		return hight;
	}
	public void setHight(int hight) {
		this.hight = hight;
	}
	public String getIcon() {
		return icon;
	}
	public void setIcon(String icon) {
		this.icon = icon;
	}
	public String getCondition() {
		return condition;
	}
	public void setCondition(String condition) {
		this.condition = condition;
	}
	
	
}


四、list_item:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ImageView
		android:layout_height="wrap_content"
		android:id="@+id/icon_imageView1"
		android:src="@drawable/icon"
		android:layout_width="wrap_content" />
	<TextView
		android:text=""
		android:id="@+id/week_textView1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView
		android:text=""
		android:id="@+id/condition_textView2"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView
		android:text=""
		android:id="@+id/low_textView3"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView
		android:text=""
		android:id="@+id/high_textView4"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
</LinearLayout>


记得添加权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
  • 大小: 13.5 KB
  • 大小: 30.4 KB
0
1
分享到:
评论

相关推荐

    天气预报,xml解析

    本文将深入探讨如何利用Android的XML Pull解析技术来处理天气预报数据,并将其集成到ListView中。 首先,让我们理解XML Pull解析的基本概念。XML Pull解析是一种轻量级的解析方式,它不需要完整的DOM(文档对象模型...

    google天气预报XML-Pull解析版(完全解析)

    在这个"google天气预报XML-Pull解析版(完全解析)"中,我们将探讨如何利用XML-Pull解析技术来处理从Google天气API获取的数据。 XML-Pull解析是一种轻量级的解析方法,与DOM(Document Object Model)和SAX(Simple...

    WebService实例-天气预报

    2. 调用方法:在客户端代码中,实例化WebService的代理类,然后调用GetWeatherForecast方法,获取天气预报数据。 五、安全性与优化 1. 安全性:为了保护WebService不被恶意使用,可以添加身份验证机制,如基本认证...

    android项目开发实例-天气预报

    这个“android项目开发实例-天气预报”旨在帮助开发者掌握如何在Android平台上实现基本的天气信息展示功能。下面将详细介绍这个项目的核心知识点。 1. **Android Studio**:作为Android应用程序的开发环境,Android...

    14-天气预报1-网络读取数据并解析JSON.rar

    在本案例中,可能是通过HTTP请求(GET或POST)来获取远程服务器上的天气预报数据。 2. **JSON(JavaScript Object Notation)**: JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。...

    天气预报接口,通过sax 解析接口数据

    在文件名为`weathers`的压缩包中,可能包含了多个城市的天气预报数据,每个城市对应一个XML文件。解析这些文件后,我们可以将天气信息组织成适合进一步处理的结构,比如列表或字典,便于在应用程序中显示或存储。 ...

    android 天气预报实例

    总结来说,“android 天气预报实例”涵盖了Android开发中的多个核心知识点,包括网络通信、数据解析、UI设计、异常处理和定位服务等。通过这个实例的学习,开发者能够提升在实际项目中的综合技能。

    13pull解析xml天气信息

    在这个例子中,开发者通常会利用Android的Pull解析器来处理XML数据,从而获取并显示天气预报信息。以下是这个主题涵盖的一些关键知识点: 1. **Android网络请求**:首先,你需要了解如何在Android应用中进行网络...

    Android天气预报实例

    【Android天气预报实例】是一个基于Java编程语言和Android操作系统开发的应用程序示例,它利用了雅虎提供的天气API来获取实时的气象数据。这个实例展示了如何在Android平台上构建一个功能完善的天气应用,其中包括...

    WebService天气预报查询的实现实例

    在本实例中,WebService作为桥梁,连接了天气预报数据提供者和用户界面。 2. SOAP(Simple Object Access Protocol): SOAP是WebService的核心通信协议,用于在Web上传输数据。它是基于XML的,允许数据以结构化的...

    SAX解析器写的简单的天气预报

    本案例中,我们关注的是如何利用SAX(Simple API for XML)解析器来处理一个与天气预报相关的XML文件,并在用户界面上展示这些信息。 SAX解析器是XML解析的一种事件驱动方法,它不会像DOM(Document Object Model)...

    android-在线天气预报案例

    4. **网络请求**:获取天气预报数据通常需要从互联网获取,这涉及到网络编程。Android使用HttpURLConnection或第三方库如OkHttp、Volley进行网络请求。你可能需要了解JSON解析,因为天气API通常返回JSON格式的数据。...

    android基于xml的天气解析

    在Android开发中,获取并解析XML数据是一项基本技能,尤其当涉及到从远程服务器获取实时信息时,如天气预报。在这个场景中,我们通常会利用网络请求获取到XML格式的天气数据,然后通过解析器将其转化为应用程序可以...

    天气预报实例

    【天气预报实例】是一个利用雅虎天气API创建的项目,主要展示了如何通过AJAX、jQuery和JSONP技术实现一个三级联动的天气预报功能。这个实例对于初学者来说是一个很好的学习资源,可以帮助他们理解和掌握相关技术。 ...

    JSP XML实现谷歌天气预报

    然而,这个API已在2012年被弃用,现在若要获取天气预报数据,通常需要使用其他第三方服务,如OpenWeatherMap、WeatherStack等。这些服务通常会提供XML或JSON格式的数据供开发者调用。在本项目中,我们假设你已经找到...

    Android之Webservice详解与调用天气预报Webservice完整实例

    8. **UI更新**:在获取到天气预报数据后,我们需要将其展示在Android应用的用户界面上。这通常涉及异步操作,可以使用AsyncTask或其他异步处理机制,以避免阻塞主线程。 9. **权限管理**:在AndroidManifest.xml中...

    Android应用源码--天气预报app案例--较成熟.zip

    应用可能接入了如OpenWeatherMap、AccuWeather等第三方天气API,获取当前及未来几天的天气预报数据。调用API时需要考虑错误处理和重试机制。 5. **权限管理**: 因为需要访问网络和位置信息,应用可能需要在...

    iphone开发xml解析

    例如,当应用需要从服务器获取新闻列表、天气预报或其他类型的数据时,这些数据通常以XML格式提供。因此,掌握XML解析技术对于开发者而言至关重要。 #### 解析过程概览 解析XML数据的过程大致可以分为以下几个步骤...

    android天气预报Demo实例

    总的来说,"android天气预报Demo实例"涵盖了Android开发中的多个核心技能,包括网络请求、数据解析、UI设计、数据绑定、缓存策略以及权限管理等。通过研究这个项目,开发者可以深入理解Android应用的开发流程,并...

Global site tag (gtag.js) - Google Analytics