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

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
	 * @param methodName
	 *            对应的方法名称
	 * @return SoapObject 请求SoapObject
	 */
	public static SoapObject doRequest(SoapObject soapObject,String methodName) {

		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER10);

		HttpTransportSE transportSE = new HttpTransportSE(Constants.WSDL_URL,5 * 1000);

		envelope.setoutputSoapObject(soapObject);
		envelope.dotNet = true;
		envelope.encodingStyle = "UTF-8";
		envelope.bodyOut = soapObject;
		try {
			transportSE.call(Constants.NAME_SPACE + methodName,envelope);
			if (null != envelope.getResponse()) {

				return (SoapObject) envelope.getResponse();

			}
		} catch (HttpResponseException e) {
			e.printstacktrace();
		} catch (IOException e) {
			e.printstacktrace();
		} catch (XmlPullParserException e) {
			e.printstacktrace();
		}

		return null;
	}

	/**
	 * <p>
	 * 获取支持的城市名称
	 * </p>
	 * 
	 * @param provinceName
	 * @return List<CityModel>
	 */
	public static List<CityModel> getSupportCity(String provinceName) {

		SoapObject soapObject = new SoapObject(Constants.NAME_SPACE,Constants.GET_SUPPORT_CITY);

		soapObject.addProperty("byProvinceName",provinceName);

		SoapObject soapObject2 = WebServiceUtils.doRequest(soapObject,Constants.GET_SUPPORT_CITY);

		if (null != soapObject2) {

			int count = soapObject2.getPropertyCount();
			CityModel cityModel = null;
			List<CityModel> list = new ArrayList<CityModel>();
			for (int i = 0; i < count; i++) {

				String str = soapObject2.getProperty(i).toString();
				cityModel = new CityModel();
				cityModel.setCityName(str.substring(0,2));
				cityModel.setCityCode(str.substring(4,9));
				list.add(cityModel);
			}

			Log.i("------->请求返回结果",list.toString());
			return list;
		}

		return null;
	}

	/**
	 * <p>
	 * 获取省份列表
	 * </p>
	 * 
	 * @return List<CityModel>
	 */
	public static List<String> getSupportProvince() {

		SoapObject soapObject = new SoapObject(Constants.NAME_SPACE,Constants.GET_SUPPORT_PROVINCE);

		SoapObject soapObject2 = WebServiceUtils.doRequest(soapObject,Constants.GET_SUPPORT_PROVINCE);

		if (null != soapObject2) {

			List<String> list = new ArrayList<String>();
			String resultStr = soapObject2.getPropertyAsstring(0).toString();
			int count = soapObject2.getPropertyCount();
			for (int i = 0; i < count; i++) {

				list.add(soapObject2.getProperty(i).toString());

			}
			Log.i("------->请求返回结果",resultStr);
			return list;

		}

		return null;
	}

	/**
	 * <p>
	 * 获取城市详细信息
	 * </p>
	 * 
	 * @param theCityName
	 * @return List<String>
	 */
	public static void getWeatherbyCityName(String theCityName) {

		SoapObject soapObject = new SoapObject(Constants.NAME_SPACE,Constants.GET_WEATHER_BY_CITYNAME);

		soapObject.addProperty("theCityName",theCityName);
		SoapObject soapObject2 = WebServiceUtils.doRequest(soapObject,Constants.GET_WEATHER_BY_CITYNAME);

		if (null != soapObject2) {

			String weather = soapObject2.toString();
			Log.e("------>具体详细天气信息",weather);
		}

	}

}


代码地址:http://download.csdn.net/detail/xxm282828/7223667

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

相关推荐