日期:2014-05-16 浏览次数:20639 次
最近公司项目使用WebService ,这里简单做个总结。 其实具体使用细节有些情况下需要改,还需要看实际情况,需要与服务器联调,具体沟通。比如公司连接,非要把envelope.dotNet = true; 设置为false, 某个<soap12:operation soapAction="http://WebXml.com.cn/getCountryCityByIp" style="document"/> soapAction为空的,就不能使用soapAction来访问,有的传递参数是json字符串......
公共接口很多:http://www.webxml.com.cn/zh_cn/index.aspx
这里使用获取天气接口:
直接上代码吧。比较简单,由于时间关系,没有详细做。但是大体上如何使用应该还是可以看的出来。但,还是研究比较深要好点。
项目结构图:
package com.example.utils; /** * <p> * 一些需要的常量 * </p> * 下午6:19:52 * * @auther dalvikCoder */ public class Constants { /** 名字空间 **/ public static String NAME_SPACE = "http://WebXml.com.cn/"; /** webservice服务器地址 **/ public static String WEBSERVICE_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; /** wsdl地址 **/ public static String WSDL_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"; /** 通过省份名称获取支持的城市 **/ public static String GET_SUPPORT_CITY = "getSupportCity"; /** 获取支持的省份名称 **/ public static String GET_SUPPORT_PROVINCE = "getSupportProvince"; /** 通过城市名称获取未来三天的天气情况 **/ public static String GET_WEATHER_BY_CITYNAME = "getWeatherbyCityName "; }
package com.example.utils; import java.io.IOException; 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.HttpResponseException; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.util.Log; import com.example.model.CityModel; import com.example.model.RegionProvince; /** * <p> * 用于WebService相关操作的工具类 * </p> * 下午5:20:51 * * @auther dalvikCoder */ public class WebServiceUtils { /** * <p> * 获取城市数据 * </p> * * @param soapObject * @return List<RegionProvince> */ public synchronized List<RegionProvince> parseProvinceList( SoapObject soapObject) { List<RegionProvince> list = new ArrayList<RegionProvince>(); RegionProvince province = null; String str = soapObject.getProperty(0).toString(); int start = str.indexOf("string"); // 记录最后一个;的位置 int end = str.lastIndexOf(";"); // 取start和end之间的字符串 String temp = str.substring(start, end); // 以;为分隔符划分数组 String[] test = temp.split(";"); for (int i = 0; i < test.length; i++) { province = new RegionProvince(); if (i == 0) { temp = test[i].substring(7); } else { temp = test[i].substring(8); } int index = temp.indexOf(","); province.setName(temp.substring(0, index)); temp = test[i].substring(11, 15); province.setId(temp); list.add(province); } return list; } public interface WebServiceCallBack { void resultCallBack(); } /** * <p> * 发送请求 * </p> * * @param soapObject * @pa