學習Android有一個月了,最近打算用webserver寫一個天氣預報程序,主要是想熟悉一下網絡通信編程這一塊,選用的網站(點擊查看)。
可以使用兩種方式進行連接
- 導入ksoap2的jar包,連接webserver得到數據
- 使用Android自帶的pull解析器得到數據
-
使用谷歌提供的ksoap2的jar包
這里只提供連接的方法
代碼塊
private String CityName;
private String URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";
private String NAMESPACE = "http://WebXml.com.cn/";
private String METHOD_NAME = "getWeatherbyCityName";
private String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";
//獲取天氣數據
public SoapObject getSoapObject() throws HttpResponseException,
IOException, XmlPullParserException {
SoapObject result = null;
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
rpc.addProperty("theCityName", CityName);
HttpTransportSE ht = new HttpTransportSE(URL);
ht.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
ht.call(SOAP_ACTION, envelope);
result = (SoapObject) envelope.getResponse();
return result;
}
//解析數據
public String parserWeatherData(SoapObject rr) {
if (rr != null) {
int count = rr.getPropertyCount();
//這里只是驗證一下能否連接成功
return rr.getProperty(count - 1).toString();
}
return null;
}
-
使用Android自帶的pull解析器解析xml數據(我使用的是這個)
代碼塊
//獲取xml數據
public Weather getWeather() throws Exception {
String Path = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=";
URL url = new URL(Path + java.net.URLEncoder.encode(CityName, "UTF-8"));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == 200) {
InputStream instream = conn.getInputStream();
return parserXML(instream);
}
return null;
}
//解析xml數據
private Weather parserXML(InputStream instream) throws Exception {
String[] weatherData = new String[23];
XmlPullParser parser = Xml.newPullParser();
parser.setInput(instream, "UTF-8");
int event = parser.getEventType();
int i = 0;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_TAG:
if ("string".equals(parser.getName())) {
weatherData[i] = parser.nextText();
i++;
}
break;
case XmlPullParser.END_TAG:
if ("string".equals(parser.getName())) {
}
break;
}
event = parser.next();
}
Weather weatherBean = new Weather();
weatherBean.City = weatherData[1];
weatherBean.TempratureRange = weatherData[5];
weatherBean.Date = weatherData[4];
String[] ss = weatherData[10].split(";");
String[] ssT = ss[0].split(":");
weatherBean.Temperature = ssT[2];
int length = ss.length;
for (int j = 0; j < length; j++) {
Log.d("weatherService", ss[j]);
}
Log.d("weatherService", "length=" + length);
if (length == 5) {
weatherBean.Wind = ss[1];
weatherBean.Dampness = ss[2];
weatherBean.Rays = ss[4];
}
String[] ssGs = weatherData[6].split(" ");
weatherBean.GaiKuang = ssGs[1];
weatherBean.GaiKuang2 = weatherData[13].replace(" ", "\n");
weatherBean.Temprature2 = weatherData[12];
weatherBean.Wind2 = weatherData[14];
weatherBean.GaiKuang3 = weatherData[18].replace(" ", "\n");
weatherBean.Temprature3 = weatherData[17];
weatherBean.Wind3 = weatherData[19];
String[] ti2 = weatherData[16].split("\\.");
weatherBean.Image2 = ti2[0];
String[] ti3 = weatherData[21].split("\\.");
weatherBean.Image3 = ti3[0];
return weatherBean;
}
具體的weather類和界面代碼可以自行下載,點擊這里