Android开发全程记录(十五)——android调用webservice的方法
16lz
2021-01-25
1.android调用webservice接口需要使用第三方jar包ksoap2,KSoap2 Android 是Android平台上一个高效、轻量级的SOAP开发包。
2.Ksoap2-android jar包下载
ksoap2 android当前的最新版本为2.5.4,名为ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar,它的下载地址是:http://code.google.com/p/ksoap2-android/,进入页面后,点击“Downloads”标签页,点击里面的链接下载。
3.下载后,将ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar放在项目的libs目录下,build path后就可以使用了。
4.具体调用
// 调用websevice接口,返回结果String nameSpace = "xxx";//命名空间,形式如:http://WebXml.com.cn/// 调用的方法名称String methodName = "xxxx";//形式如:getMobileCodeInfo// EndPointString endPoint = "xxxxxx";//形式如:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx// SOAP ActionString soapAction = "xxxxxxxxxx";//形式如:http://WebXml.com.cn/getMobileCodeInfo// 指定WebService的命名空间和调用的方法名SoapObject rpc = new SoapObject(nameSpace, methodName);// 设置需调用WebService接口需要传入的两个参数mobileCode、userIdrpc.addProperty("params", "xxxx");// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);envelope.bodyOut = rpc;// 设置是否调用的是dotNet开发的WebServiceenvelope.dotNet = true;// 等价于envelope.bodyOut = rpc;envelope.setOutputSoapObject(rpc);HttpTransportSE transport = new HttpTransportSE(endPoint);try {// 调用WebServicetransport.call(soapAction, envelope);// 获取返回的数据if (envelope.bodyIn != null) {SoapObject object = (SoapObject) envelope.bodyIn;if (object.getPropertyCount() > 0) {jsonResult = object.getProperty(0).toString();}}} catch (Exception e) {e.printStackTrace();jsonResult="";}
5.解释
当在浏览器中访问WSDL时,很容易得知命名空间、调用的方法名称是什么,至于EndPoint通常是将WSDL地址末尾的"?wsdl"去除后剩余的部分;而SOAP Action通常为命名空间 + 调用的方法名称。
6.补充一下,详细代码
/* * 基本功能:调用webservice,返回json字符串 */public static String getWebserviceResult(String methodName,Map<String, String> map) {String nameSpace = Constants.NAMESPACE;String endPoint = Constants.ENDPOINT;String soapAction = nameSpace + methodName;// 指定WebService的命名空间和调用的方法名SoapObject rpc = new SoapObject(nameSpace, methodName);@SuppressWarnings("rawtypes")Iterator iter = map.entrySet().iterator();while (iter.hasNext()) {@SuppressWarnings("rawtypes")Map.Entry entry = (Map.Entry) iter.next();String key = (String) entry.getKey();String val = (String) entry.getValue();// 设置需调用WebService接口需要传入参数rpc.addProperty(key, val);}// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = rpc;// 设置是否调用的是dotNet开发的WebServiceenvelope.dotNet = true;// 等价于envelope.bodyOut = rpc;envelope.setOutputSoapObject(rpc);String jsonResult = "";HttpTransportSE transport = new HttpTransportSE(endPoint, 3000);// 设置超时try {// 调用WebServicetransport.call(soapAction, envelope);// 获取返回的数据if (envelope.bodyIn != null) {SoapObject object = (SoapObject) envelope.bodyIn;if (object.getPropertyCount() > 0) {jsonResult = object.getProperty(0).toString();}}} catch (Exception e) { e.printStackTrace();jsonResult="";}return jsonResult;}
更多相关文章
- Android(安卓)- SharedPreferences 数据存储
- Android常用工具库
- Android(安卓)YUV视频数据叠加时间信息
- Ubuntu编译Android(安卓)KitKat 4.4出现Chromium gyp HashSet_jn
- android退出activity
- Android(安卓)获取系统prop
- Android(安卓)Fragment和Activity之间通过接口互传数据通信
- Android(安卓)源码分析-打电话和发短信
- Android的ViewFlipper与GestureDetector