Android:WebService简介及实例

简介:java

SoapObject : 指定webservice的命名空间和调用的方法名
SoapSerializationEnvelope :生成调用Webservice方法的SOAP请求信息
HttpTransportSE : 建立HttpTransportsSE对象。经过HttpTransportsSE类的构造方法能够指定WebService的WSDL文档的URL
使用call方法调用WebService方法
使用getResponse方法得到WebService方法的返回结果
android


正文:
web

首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包      下载地址浏览器

而后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键->build path->configure build path--选择Libraries,如图:服务器

同时,只添加jar包肯能是不够的,须要添加class folder,便可以再工程的libs文件夹中加入下载的KSOAP包,如图:ide

 

环境配好以后能够用下面七个步骤来调用WebService方法:网站

第一:实例化SoapObject对象,指定webService的命名空间(从相关WSDL文档中能够查看命名空间),以及调用方法名称。如:ui

/命名空间
privatestatic final String serviceNameSpace="http://WebXml.com.cn/";
//调用方法(得到支持的城市)
privatestatic final String getSupportCity="getSupportCity";
//实例化SoapObject对象
SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);

第二步:假设方法有参数的话,设置调用方法参数:this

request.addProperty("参数名称","参数值");

第三步:设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致)spa

//得到序列化的Envelope
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut=request;

第四步:注册Envelope

(new MarshalBase64()).register(envelope);

第五步:构建传输对象,并指明WSDL文档URL

/请求URL
privatestatic final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
//Android传输对象
AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);
transport.debug=true;

第六步:调用WebService(其中参数为1:命名空间+方法名称,2Envelope对象)

transport.call(serviceNameSpace+getWeatherbyCityName, envelope);

第七步:解析返回数据:

if(envelope.getResponse()!=null){
                return parse(envelope.bodyIn.toString());
            }

------------------------------------------------------------------------------------------------------------------------------------------

例子:具体详见http://blog.csdn.net/zd_1471278687/article/details/11925349

这里有个地址提供webService天气预报的服务网站,在浏览器中输入网站:http://www.webxml.com.cn/webservices/weatherwebservice.asmx能够看到该网站提供的

调用方法,点进去以后能够看到调用时须要输入的参数,固然有的不须要参数,例如:getSupportProvince ,而getSupportCity须要输入查找的省份名,getWeatherbyCityName 须要输入查找的城市名。接下来咱们就利用这三个接口得到数据,并作出显示:

得到本天气预报Web Service支持的洲,国内外省份和城市信息:

public class MainActivity extends Activity {  
    // WSDL文档中的命名空间  
    private static final String targetNameSpace = "http://WebXml.com.cn/";  
    // WSDL文档中的URL  
    private static final String WSDL = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";  
  
    // 须要调用的方法名(得到本天气预报Web Services支持的洲、国内外省份和城市信息)  
    private static final String getSupportProvince = "getSupportProvince";  
    private List<Map<String,String>> listItems;  
    private ListView mListView;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        listItems = new ArrayList<Map<String,String>>();  
        mListView = (ListView) findViewById(R.id.province_list);  
        new NetAsyncTask().execute();  
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                String mProvinceName = listItems.get(position).get("province");  
                Log.d("ProvinceName", mProvinceName);  
                Intent intent = new Intent();  
                intent.putExtra("Pname", mProvinceName);  
                intent.setClass(MainActivity.this, CityActivity.class);  
                startActivity(intent);  
            }  
              
        });  
    }  
  
    class NetAsyncTask extends AsyncTask<Object, Object, String> {  
  
        @Override  
        protected void onPostExecute(String result) {  
            if (result.equals("success")) {  
                //列表适配器  
                SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, listItems, R.layout.province_item,   
                        new String[] {"province"}, new int[]{R.id.province});  
                mListView.setAdapter(simpleAdapter);  
            }  
            super.onPostExecute(result);  
        }  
  
        @Override  
        protected String doInBackground(Object... params) {  
            // 根据命名空间和方法获得SoapObject对象  
            SoapObject soapObject = new SoapObject(targetNameSpace,  
                    getSupportProvince);  
            // 经过SOAP1.1协议获得envelop对象  
            SoapSerializationEnvelope envelop = new SoapSerializationEnvelope(  
                    SoapEnvelope.VER11);  
            // 将soapObject对象设置为envelop对象,传出消息  
  
            envelop.dotNet = true;  
            envelop.setOutputSoapObject(soapObject);  
            // 或者envelop.bodyOut = soapObject;  
            HttpTransportSE httpSE = new HttpTransportSE(WSDL);  
            // 开始调用远程方法  
            try {  
                httpSE.call(targetNameSpace + getSupportProvince, envelop);  
                // 获得远程方法返回的SOAP对象  
                SoapObject resultObj = (SoapObject) envelop.getResponse();  
                // 获得服务器传回的数据  
                int count = resultObj.getPropertyCount();  
                for (int i = 0; i < count; i++) {  
                    Map<String,String> listItem = new HashMap<String, String>();  
                    listItem.put("province", resultObj.getProperty(i).toString());  
                    listItems.add(listItem);  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
                return "IOException";  
            } catch (XmlPullParserException e) {  
                e.printStackTrace();  
                return "XmlPullParserException";  
            }  
            return "success";  
        }  
    }  
}
相关文章
相关标签/搜索