六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

Android开发WeatherForecast程序

[复制链接]

升级  84.33%

137

主题

137

主题

137

主题

举人

Rank: 3Rank: 3

积分
453
 楼主| 发表于 2013-1-15 02:59:39 | 显示全部楼层 |阅读模式
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;@Overridepublic 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>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表