Android 用ksoap2调用webservice的方法
Android 用ksoap2 调用webService 这个问题相信困扰了很多人,网上的教程虽然很多,但经过本人的测试大多数都有问题,尤其是在模拟器上运行的时候大都会出错,经过多次的实验,终于找出了一个绝对正确的调用方法,在此与大家分享一下:
import java.sql.*;
public class Hello {
public String sayHello(String user)
{
return "Hello,"+user;
}
}
这是一个很简单的服务端代码,得到客户端传来的user值,然后返回值为Hello,user,然后将这个服务端代码发布成webservice服务,具体方法可以参考我的另一篇博客:
最简单的webservice配置与发布方(POJO):http://blog.csdn.net/dhbsdsg/article/details/7842157
然后查看WSDL文件:
在这里我们只需要看4个地方就行了:
第一:targetNamespace(命名空间): http://ws.apache.org/axis2
第二:element name(方法名): sayHello
第三:参数名: user
第四:URL(也就是这个wsdl文件的地址): http://localhost:8080/axis2/services/Hello?wsdl
二:客户端的代码:
首先要先下载ksoap包:
ksoap2 android当前的最新版本为2.5.4,名为ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar,它的下载地址是:http://code.google.com/p/ksoap2-android/,进入页面后,点击“Downloads”标签页,如下图所示:
在“Downloads”页面的下方,找到如下图所示的紫色的链接,然后在链接上点击右键,找到相关下载项进行下载即可。右键菜单中显示的下载项依据浏览器的不同而有所区别,比如我使用的360浏览器,在键接上点击右键,然后选择“使用360安全浏览器下载”即可弹出下载保存对话框。
然后创建一个新的工程,将下载的ksoap包导入到工程里,然后我实现的方法是在客户端的代码里写一个调用该服务的方法,我的方法名和参数和参数相同,实际应用时可以自己随便定义:
public String sayHello(String user)
{
String nameSpace = "http://ws.apache.org/axis2";
String methodName = "satHello";
String url = "http://192.168.1.21:8080/axis2/services/Hello?wsdl";
//此处一定要注意,在模拟器中运行的时候一定要把localhost改为提供服务的电脑的IP地址,否则无法运行
SoapObject rpc = new SoapObject(nameSpace, methodName);
rpc.addProperty("user", user); //此处分号里的为webservice的参数名,后面的为你自己传的值
HttpTransportSE ht = new HttpTransportSE(url);
ht.debug=true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
try {
ht.call(null, envelope);
} catch (Exception e) {
e.printStackTrace();
}
SoapObject object = (SoapObject) envelope.bodyIn;
String result=object.getProperty(0).toString();
return result;
}
然后在onCreate()方法里调用你写的这个方法:
text=(TextView)findViewById(R.id.test);
text.setText(sayHello("Guardian"));
然后在模拟器里测试运行,就能看到Textview里显示:Hello,Guardian
三:注意事项:
1: //错误写法 不能强制类型转换
//result=(String)soapObject.getProperty("return");
//正确写法 toString();
result=soapObject.getProperty("return").toString();
2:AndroidManifest.xml
添加访问INTERNET 权限
<uses-permission android:name="android.permission.INTERNET" />
3: private static final String URL = "http://192.168.1.21:8080/axis2/services/Hello?wsdl";
用private static final String URL = "http://localhost:8080/axis2/services/Hello?wsdl"; 不行会出现IOException 异常
注:本文为原创,转载请注明出处,谢谢。