在上一篇,我们开发了自定义的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();
源码下载