Android開發WeatherForecast程序

1,使用Googel API
http://www.google.com/ig/api?&weather=beijing

2,使用DOM解析XML

Java代碼 複製代碼
  1. String weather = "";   
  2. String url = "http://www.google.com/ig/api?&weather=beijing";   
  3. DefaultHttpClient client = new DefaultHttpClient();   
  4. HttpUriRequest req = new HttpGet(url);   
  5. HttpResponse resp = client.execute(req);   
  6. HttpEntity ent = resp.getEntity();   
  7. InputStream stream = ent.getContent();   
  8. DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();   
  9. Document d = b.parse(new InputSource(stream));   
  10. NodeList n = d.getElementsByTagName("forecast_conditions");   
  11. for (int i = 0; i < n.getLength(); i++) {   
  12.     weather += n.item(i).getChildNodes().item(0).getAttributes().item(0).getNodeValue();   
  13.     weather += ", ";   
  14.     weather += (Integer.parseInt(n.item(i).getChildNodes().item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;   
  15.     weather += " ~ ";   
  16.     weather += (Integer.parseInt(n.item(i).getChildNodes()   
  17.                                 .item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;   
  18.     weather += ", ";   
  19.     weather += n.item(i).getChildNodes().item(4).getAttributes().item(0).getNodeValue();   
  20.     weather += "/n";   
  21. }  
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請求

Java代碼 複製代碼
  1. new Thread() {   
  2.     public void run() {   
  3.         try {   
  4.             // ...   
  5.         } catch (Exception e) {   
  6.             e.printStackTrace();   
  7.         }   
  8.     }   
  9. }.start();  
new Thread() {
	public void run() {
		try {
			// ...
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}.start();



4,使用Handler傳遞Thread處理結果到UI主Thread

Java代碼 複製代碼
  1. h = new Handler() {   
  2.     public void handleMessage(Message msg) {   
  3.         tv.setText((String)msg.obj);   
  4.     }   
  5. };   
  6.   
  7. new Thread() {   
  8.     // ...   
  9.     Message msg = h.obtainMessage(111, weather);   
  10.     h.sendMessage(msg);   
  11. }  
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,完整代碼

Java代碼 複製代碼
  1. package com.hideto.weatherforecast;   
  2.   
  3. import java.io.InputStream;   
  4.   
  5. import javax.xml.parsers.DocumentBuilder;   
  6. import javax.xml.parsers.DocumentBuilderFactory;   
  7.   
  8. import org.apache.http.HttpEntity;   
  9. import org.apache.http.HttpResponse;   
  10. import org.apache.http.client.methods.HttpGet;   
  11. import org.apache.http.client.methods.HttpUriRequest;   
  12. import org.apache.http.impl.client.DefaultHttpClient;   
  13. import org.w3c.dom.Document;   
  14. import org.w3c.dom.NodeList;   
  15. import org.xml.sax.InputSource;   
  16.   
  17. import android.app.Activity;   
  18. import android.os.Bundle;   
  19. import android.os.Handler;   
  20. import android.os.Message;   
  21. import android.widget.TextView;   
  22.   
  23. public class WeatherForecast extends Activity {   
  24.   
  25.     public TextView tv;   
  26.     public Handler h;   
  27.   
  28.     @Override  
  29.     public void onCreate(Bundle savedInstanceState) {   
  30.         super.onCreate(savedInstanceState);   
  31.         tv = new TextView(this);   
  32.         tv.setText("Loading...");   
  33.         setContentView(tv);   
  34.         h = new Handler() {   
  35.             public void handleMessage(Message msg) {   
  36.                 tv.setText((String)msg.obj);   
  37.             }   
  38.         };   
  39.         new Thread() {   
  40.             public void run() {   
  41.                 try {   
  42.                     String weather = "";   
  43.                     String url = "http://www.google.com/ig/api?&weather=beijing";   
  44.                     DefaultHttpClient client = new DefaultHttpClient();   
  45.                     HttpUriRequest req = new HttpGet(url);   
  46.                     HttpResponse resp = client.execute(req);   
  47.                     HttpEntity ent = resp.getEntity();   
  48.                     InputStream stream = ent.getContent();   
  49.                     DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();   
  50.                     Document d = b.parse(new InputSource(stream));   
  51.                     NodeList n = d.getElementsByTagName("forecast_conditions");   
  52.                     for (int i = 0; i < n.getLength(); i++) {   
  53.                         weather += n.item(i).getChildNodes().item(0)   
  54.                                 .getAttributes().item(0).getNodeValue();   
  55.                         weather += ", ";   
  56.                         weather += (Integer.parseInt(n.item(i).getChildNodes()   
  57.                                 .item(1).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;   
  58.                         weather += " ~ ";   
  59.                         weather += (Integer.parseInt(n.item(i).getChildNodes()   
  60.                                 .item(2).getAttributes().item(0).getNodeValue()) - 32) * 5 / 9;   
  61.                         weather += ", ";   
  62.                         weather += n.item(i).getChildNodes().item(4)   
  63.                                 .getAttributes().item(0).getNodeValue();   
  64.                         weather += "/n";   
  65.                     }   
  66.                     Message msg = h.obtainMessage(111, weather);   
  67.                     h.sendMessage(msg);   
  68.                 } catch (Exception e) {   
  69.                     e.printStackTrace();   
  70.                 }   
  71.             }   
  72.         }.start();   
  73.     }   
  74. }  
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訪問權限

Java代碼 複製代碼
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.hideto.weatherforecast"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0.0">   
  6.     <uses-permission android:name="android.permission.INTERNET"></uses-permission>   
  7.     <application android:icon="@drawable/icon" android:label="@string/app_name">   
  8.         <activity android:name=".WeatherForecast"  
  9.                   android:label="@string/app_name">   
  10.             <intent-filter>   
  11.                 <action android:name="android.intent.action.MAIN" />   
  12.                 <category android:name="android.intent.category.LAUNCHER" />   
  13.             </intent-filter>   
  14.         </activity>   
  15.     </application>   
  16. </manifest>   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章