基于Android的WebService开发例子

WebService提供服务网站:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx


开发时需要结合网站提供的Soap的请求示例,例如请求示例:

POST /WebServices/WeatherWS.asmx HTTP/1.1
Host: webservice.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getRegionProvince"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getRegionProvince xmlns="http://WebXml.com.cn/" />
  </soap:Body>
</soap:Envelope>

Activity如下:

package com.zeph.android.webservice.example;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.MarshalBase64;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.os.Bundle;

public class WebServiceExampleActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		getCityCodeMap();
	}
	/**
	 * 获得中国省份、直辖市、地区和与之对应的ID
	 * @return
	 */
	public Map<String, String> getCityCodeMap() {
		// 提供web service服务的asmx文件的url
		String url = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";
		// soap对象的命名空间
		String namespace = "http://WebXml.com.cn/";
		// soap对象的名字
		String name = "getRegionProvince";
		// soap1.1版本中该soap要求的Action
		String soapAction = "http://WebXml.com.cn/getRegionProvince";
		// soap对象,参数为soap的名字和soap的命名空间
		SoapObject soap = new SoapObject(namespace, name);
		// Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一
		// Base64编码可用于在HTTP环境下传递较长的标识信息。
		MarshalBase64 base64 = new MarshalBase64();
		// Envelope对象,设置soap的版本是soap1.1版本
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);
		//设置envelope中body的值
		envelope.bodyOut = soap;
		// 给envelope注册 Base64
		base64.register(envelope);
		//创建基于JavaSE的Http传输层对象
		HttpTransportSE ht = new HttpTransportSE(url);
		try {
			//调用web service服务
			ht.call(soapAction, envelope);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		}
		try {
			if (!envelope.getResponse().equals(null)) {
				return cityCodeParser(envelope.getResponse().toString());
			}
		} catch (SoapFault e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 获得中国省份、直辖市、地区和与之对应的ID解析器
	 * @param data
	 * @return
	 */
	public Map<String, String> cityCodeParser(String data) {
		String extractData = data
				.substring(data.indexOf("=") + 1, data.length() - 1)
				.replace("string=", "").trim();
		String[] citiesNameValue = extractData.split(";");
		Map<String, String> map = new HashMap<String, String>();
		for (int i = 0; i < citiesNameValue.length; i++) {
			String[] cityNameValue = citiesNameValue[i].trim().split(",");
			map.put(cityNameValue[0], cityNameValue[1]);
		}
		return map;
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值