`
hideto
  • 浏览: 2679021 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android开发WeatherForecast程序

    博客分类:
  • Java
阅读更多
1,使用Googel API
http://www.google.com/ig/api?&weather=beijing

2,使用DOM解析XML
String weather = "";
String url = "http://www.google.com/ig/api?&weather=beijing";
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest req = new HttpGet(url);
HttpResponse resp = client.execute(req);
HttpEntity ent = resp.getEntity();
InputStream stream = ent.getContent();
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document d = b.parse(new InputSource(stream));
NodeList n = d.getElementsByTagName("forecast_conditions");
for (int i = 0; i < n.getLength(); i++) {
	weather += n.item(i).getChildNodes().item(0).getAttributes().item(0).getNodeValue();
	weather += ", ";
	weather += (Integer.parseInt(n.item(i).getChildNodes().item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
	weather += " ~ ";
	weather += (Integer.parseInt(n.item(i).getChildNodes()
								.item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
	weather += ", ";
	weather += n.item(i).getChildNodes().item(4).getAttributes().item(0).getNodeValue();
	weather += "\n";
}


3,另起Thread处理Web请求
new Thread() {
	public void run() {
		try {
			// ...
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}.start();


4,使用Handler传递Thread处理结果到UI主Thread
h = new Handler() {
	public void handleMessage(Message msg) {
		tv.setText((String)msg.obj);
	}
};

new Thread() {
	// ...
	Message msg = h.obtainMessage(1, 1, 1, weather);
	h.sendMessage(msg);
}


5,完整代码
package com.hideto.weatherforecast;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class WeatherForecast extends Activity {

	public TextView tv;
	public Handler h;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		tv = new TextView(this);
		tv.setText("Loading...");
		setContentView(tv);
		h = new Handler() {
			public void handleMessage(Message msg) {
				tv.setText((String)msg.obj);
			}
		};
		new Thread() {
			public void run() {
				try {
					String weather = "";
					String url = "http://www.google.com/ig/api?&weather=beijing";
					DefaultHttpClient client = new DefaultHttpClient();
					HttpUriRequest req = new HttpGet(url);
					HttpResponse resp = client.execute(req);
					HttpEntity ent = resp.getEntity();
					InputStream stream = ent.getContent();
					DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
					Document d = b.parse(new InputSource(stream));
					NodeList n = d.getElementsByTagName("forecast_conditions");
					for (int i = 0; i < n.getLength(); i++) {
						weather += n.item(i).getChildNodes().item(0)
								.getAttributes().item(0).getNodeValue();
						weather += ", ";
						weather += (Integer.parseInt(n.item(i).getChildNodes()
								.item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
						weather += " ~ ";
						weather += (Integer.parseInt(n.item(i).getChildNodes()
								.item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;
						weather += ", ";
						weather += n.item(i).getChildNodes().item(4)
								.getAttributes().item(0).getNodeValue();
						weather += "\n";
					}
					Message msg = h.obtainMessage(1, 1, 1, weather);
					h.sendMessage(msg);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}.start();
	}
}


6,修改AndroidManifest.xml加上INTERNET访问权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.hideto.weatherforecast"
      android:versionCode="1"
      android:versionName="1.0.0">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".WeatherForecast"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest> 
分享到:
评论

相关推荐

    android_weatherforecast.zip_android

    在安卓平台上开发一款天气预报应用是一项常见的任务,它涉及到Android应用程序的基本架构、网络请求、数据解析、UI设计以及用户交互等多个方面。以下是对"android_weatherforecast.zip_android"这个压缩包中可能包含...

    Android-WeatherForecast

    “Android-WeatherForecast”作为一个完整的Android项目,涵盖了网络编程、数据解析、用户界面设计等多个方面,是学习Android开发的优秀实例。通过对这个项目的理解和实践,开发者可以深入掌握Android应用开发的关键...

    Android代码-WeatherForecast应用源码.zip

    【Android代码-WeatherForecast应用源码.zip】是一个包含Android应用程序源代码的压缩文件,主要用于学习和研究Android开发,特别是天气预报应用的实现。这个源码提供了实现天气展示、数据获取和用户交互等功能的...

    Android WeatherForecast应用源码.zip

    【Android WeatherForecast应用源码分析】 在Android平台上,开发一款WeatherForecast应用是常见的实践,它通常用于展示...记得在学习过程中,逐步理解每个组件的作用,并尝试修改和优化,以更好地掌握Android开发。

    Android程序研发源码Android WeatherForecast应用源码.rar

    在Android开发领域,掌握源码分析是提升技术深度的关键。这里我们关注的是一个名为"Android WeatherForecast"的应用程序源码,这是一个典型的天气预报类应用,旨在帮助用户获取实时天气信息。通过深入研究这个应用的...

    Android应用源码之WeatherForecast-IT计算机-毕业设计.zip

    本篇将围绕"Android应用源码之WeatherForecast"这一主题,针对毕业设计进行深入探讨,旨在帮助初学者和有经验的开发者更好地理解Android应用的开发流程与技术要点。 一、Android应用结构分析 WeatherForecast应用...

    Android WeatherForecast应用源码.rar

    Android WeatherForecast应用源码是Android开发中的一款常见示例,它展示了如何在Android平台上构建一个天气预报应用程序。这个应用通常包括获取天气数据、数据显示、用户交互等多个核心功能模块,是学习Android开发...

    andrio 编写 WeatherForecast

    Android天气预报程序源代码,获取的Google的天气API数据,自己可再次扩展,这里运行截图比较难抓,有环境的就下载源码测试吧,Android天气预报WeatherForecast似乎是常见而又简单的Android初级例子,但想开发出一款...

    Android WeatherForecast应用源码-IT计算机-毕业设计.zip

    总结,Android WeatherForecast应用源码是一个全面的学习平台,涵盖了网络通信、数据解析、UI设计、服务与通知、权限管理等多个Android开发的关键环节。通过深入研究这份源码,学生不仅能掌握Android应用开发的基本...

    Android WeatherForecast天气预报例子源代码

    Android天气预报程序源代码,获取的Google的天气API数据,自己可再次扩展,这里运行截图比较难抓,有环境的就下载源码测试吧,Android天气预报WeatherForecast似乎是常见而又简单的Android初级例子,但想开发出一款...

    安卓Android源码——WeatherForecast.zip

    这个源码可以作为Android开发的学习案例,帮助开发者了解如何在Android平台上构建一个完整的应用,涉及到网络请求、数据解析、UI设计和用户交互等多个方面。同时,它也可以作为一个基础,为开发者提供灵感,以实现...

    安卓Android源码——WeatherForecast.rar

    在Android开发中,源码学习是提升技术深度的重要途径。"WeatherForecast" 是一个典型的安卓应用程序,它可能用于展示天气预报信息。通过深入分析这个项目的源码,我们可以了解到许多关于Android应用开发的知识点。 ...

    Android应用源码之WeatherForecast.zip

    3. **MVVM架构**:考虑到现代Android开发趋势,WeatherForecast可能采用了Model-View-ViewModel(MVVM)架构,使业务逻辑和视图分离,提高代码的可测试性和可维护性。 4. **LiveData与ViewModel**:在MVVM中,...

    Android源码——WeatherForecast应用源码_new_20.zip

    【Android源码——WeatherForecast应用源码_new_20.zip】是一个包含Android应用程序源代码的压缩文件,专门针对一个名为WeatherForecast的应用。这个应用可能是用来显示天气预报信息的,因此,我们可以从源码中学习...

    小程序源码 辅助类库 WeatherForecast应用源码.rar

    总的来说,这个WeatherForecast应用源码为学习小程序和Android应用开发提供了实践素材,特别是对于那些对天气预报应用开发感兴趣的开发者,他们可以从源码中学习如何整合API、处理网络请求、设计用户界面以及优化...

    WeatherForecast_java_WeatherForecast_

    标题中的"WeatherForecast_java_WeatherForecast_"表明这是一个关于Java编程的天气预报程序,可能是用于Android平台,因为压缩包内包含了"AndroidWeatherForecast"这个文件,这通常代表Android应用的源代码。...

Global site tag (gtag.js) - Google Analytics