微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Webservices获取天气

// 定义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() { // 调用方法 final String methodName = "getRegionProvince"; // 创建HttpTransportSE传输对象 final HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); ht.debug = true; // 使用SOAP1.1协议创建Envelop对象 final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // 实例化SoapObject对象 SoapObject soapObject = new SoapObject(SERVICE_NS,methodName); envelope.bodyOut = soapObject; // 设置与.Net提供的Web Service保持较好的兼容性 envelope.dotNet = true; FutureTask<List<String>> task = new FutureTask<List<String>>( new Callable<List<String>>(){ @Override public List<String> call()throws Exception{ // 调用Web Service ht.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); } return null; } }); new Thread(task).start(); try{ return task.get(); } catch (Exception e){ e.printstacktrace(); } return null; } /** * 根据省获取市列表 * @param province * @return */ public static List<String> getCityListByProvince(String province) { // 调用方法 final String methodName = "getSupportCityString"; // 创建HttpTransportSE传输对象 final HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); ht.debug = true; // 实例化SoapObject对象 SoapObject soapObject = new SoapObject(SERVICE_NS,methodName); // 添加一个请求参数 soapObject.addProperty("theRegionCode",province); // 使用SOAP1.1协议创建Envelop对象 final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = soapObject; // 设置与.Net提供的Web Service保持较好的兼容性 envelope.dotNet = true; FutureTask<List<String>> task = new FutureTask<List<String>>( new Callable<List<String>>(){ @Override public List<String> call()  throws Exception { // 调用Web Service ht.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); } return null; } }); new Thread(task).start(); try { return task.get(); } catch (Exception e) { e.printstacktrace(); } return null; } /** * 获取天气 * @param cityName * @return */ public static SoapObject getWeatherByCity(String cityName){ final String methodName = "getWeather"; final HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); ht.debug = true; final SoapSerializationEnvelope envelope =  new SoapSerializationEnvelope(SoapEnvelope.VER11); SoapObject soapObject = new SoapObject(SERVICE_NS,methodName); soapObject.addProperty("theCityCode",cityName); envelope.bodyOut = soapObject; // 设置与.Net提供的Web Service保持较好的兼容性 envelope.dotNet = true; FutureTask<SoapObject> task = new FutureTask<SoapObject>( new Callable<SoapObject>(){ @Override public SoapObject call()throws Exception{ ht.call(SERVICE_NS + methodName,envelope); SoapObject result = (SoapObject) envelope.bodyIn; SoapObject detail = (SoapObject) result.getProperty( methodName + "Result"); return detail; } }); new Thread(task).start(); try{ return task.get(); } 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++){ // 解析出每个省份 result.add(detail.getProperty(i).toString().split(",")[0]); } return result; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐