Android开发项目:Android天气预报
Android开发项目:Android天气预报
这个项目是基于webservice的,用ksoap2来解析网络上的WebService的,我们先看做出的效果图其实也没有很多技术难题,我们直接来看源码再做说明吧
Android天气预报源码下载
免费下载地址在 http://linux.bkjia.com/
用户名与密码都是www.bkjia.com
具体下载目录在 /2012年资料/2月/13日/Android开发教程:Android天气预报/
[java]
- import java.util.ArrayList;
- import java.util.List;
- import org.ksoap2.SoapEnvelope;
- import org.ksoap2.serialization.SoapObject;
- import org.ksoap2.serialization.SoapSerializationEnvelope;
- import org.ksoap2.transport.HttpTransportSE;
- public class WebServiceUtil
- {
- // 定义Web Service的命名空间
- static final String SERVICE_NS = "http://WebXml.com.cn/";
- // 定义Web Service提供服务的URL
- static final String SERVICE_URL = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";
- /**
- * 获得州,国内外省份和城市信息
- *
- * @return
- */
- public static List<String> getProvinceList()
- {
- // 需要调用的方法名(获得本天气预报Web Services支持的洲、国内外省份和城市信息)
- String methodName = "getRegionProvince";
- // 创建HttpTransportSE传输对象
- HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
- httpTranstation.debug = true;
- // 使用SOAP1.1协议创建Envelop对象
- SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
- SoapEnvelope.VER11);
- // 实例化SoapObject对象
- SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
- envelope.bodyOut = soapObject;
- // 设置与.Net提供的Web Service保持较好的兼容性
- envelope.dotNet = true;
- try
- {
- // 调用Web Service
- httpTranstation.call(SERVICE_NS + methodName, envelope);
- if (envelope.getResponse() != null)
- {
- // 获取服务器响应返回的SOAP消息
- SoapObject result = (SoapObject) envelope.bodyIn;
- SoapObject detail = (SoapObject) result.getProperty(methodName
- + "Result");
- // 解析服务器响应的SOAP消息。
- return parseProvinceOrCity(detail);
- }
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 根据省份获取城市列表
- *
- * @param province
- * @return
- */
- public static List<String> getCityListByProvince(String province)
- {
- // 需要调用的方法名(获得本天气预报Web Services支持的城市信息,根据省份查询城市集合:带参数)
- String methodName = "getSupportCityString";
- HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
- httpTranstation.debug = true;
- SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
- SoapEnvelope.VER11);
- SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
- soapObject.addProperty("theRegionCode", province);
- envelope.bodyOut = soapObject;
- envelope.dotNet = true;
- try
- {
- // 调用Web Service
- httpTranstation.call(SERVICE_NS + methodName, envelope);
- if (envelope.getResponse() != null)
- {
- // 获取服务器响应返回的SOAP消息
- SoapObject result = (SoapObject) envelope.bodyIn;
- SoapObject detail = (SoapObject) result.getProperty(methodName
- + "Result");
- // 解析服务器响应的SOAP消息。
- return parseProvinceOrCity(detail);
- }
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- return null;
- }
- private static List<String> parseProvinceOrCity(SoapObject detail)
- {
- ArrayList<String> result = new ArrayList<String>();
- for (int i = 0; i < detail.getPropertyCount(); i++)
- {
- String str = detail.getProperty(i).toString();
- // 解析出每个省份
- result.add(str.split(",")[0]);
- }
- return result;
- }
- public static SoapObject getWeatherByCity(String cityName)
- {
- // 根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数
- String methodName = "getWeather";
- HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
- httpTranstation.debug = true;
- SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
- SoapEnvelope.VER11);
- SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
- soapObject.addProperty("theCityCode", cityName);
- envelope.bodyOut = soapObject;
- envelope.dotNet = true;
- try
- {
- // 调用Web Service
- httpTranstation.call(SERVICE_NS + methodName, envelope);
- if (envelope.getResponse() != null)
- {
- // 获取服务器响应返回的SOAP消息
- SoapObject result = (SoapObject) envelope.bodyIn;
- SoapObject detail = (SoapObject) result.getProperty(methodName
- + "Result");
- // 解析服务器响应的SOAP消息。
- return detail;
- }
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- return null;
- }
- }
|
评论暂时关闭