在上一篇,我们开发了自定义的service:使用MyEclipse开发webservice,今天我们用android程序调用自定义的webservice接口:
在浏览器输入http://192.168.0.5:8080/TestService/MyServicePort?wsdl
其中MyServicePort是webservice服务器端的sun-jaxws.xml文件中的url-pattern="/MyServicePort"
注意这里的192.168.0.5是我本机的ip地址,需要改为自己的ip地址,如下图:
3.建立android客户端:
点击Add Externl JARS
添加ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包
注意在android客户端调用webservice时涉及到连接网络,所以
需要注意的是:当服务器端返回的是二进制形式的时候,则
SoapObject object = (SoapObject) envelope.getResponse();
否则
SoapObject object = (SoapObject) envelope.bodyIn;
当android客户端向androidservice服务端传递方法所需要的多个参数时候:
// 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(NAMESPACE, "add"); // 设置需调用WebService接口需要传入的两个参数mobileCode、userId rpc.addProperty("arg0",Integer.parseInt(one.getText().toString())); rpc.addProperty("arg1",Integer.parseInt(two.getText().toString()));
1.添加权限:<uses-permission android:name="android.permission.INTERNET"/>
2.新建线程,让那些步骤在新线程中执行
关键代码如下:
//命名空间
String NAMESPACE = "http://webservice.test.liuhang.com/";
//调用的方法名 String methodName = "sayHello"; //endPoint String endPoint = "http://192.168.0.5:8080/TestService/MyServicePort?wsdl"; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(NAMESPACE, methodName); // 设置需调用WebService接口需要传入的两个参数mobileCode、userId rpc.addProperty("arg0","hahaaa"); // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = false; envelope.bodyOut = rpc; envelope.setOutputSoapObject(rpc); final HttpTransportSE transport = new HttpTransportSE(endPoint); <span style="white-space:pre"> </span>new Thread(){ public void run() { try { <span style="white-space:pre"> </span>// 调用WebService transport.call(null, envelope); if(envelope.getResponse()!=null){ // 获取返回的数据 SoapObject object = (SoapObject) envelope.bodyIn; String result= object.getProperty(0).toString(); Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("result",result); <span style="white-space:pre"> </span>message.setData(bundle); message.what = 1; handler.sendMessage(message); } } catch (Exception e) { <span style="white-space:pre"> </span>e.printStackTrace(); } <span style="white-space:pre"> </span>}; }.start();
原文地址:http://blog.csdn.net/mockingbirds/article/details/44859041