soap

来源:互联网 发布:淘宝汽车装饰品 编辑:程序博客网 时间:2024/06/11 02:45
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;
    }
}
原创粉丝点击