日期:2014-05-16  浏览次数:20639 次

WebService的相关使用

最近公司项目使用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