话不多说,正文如下:
1.在lib中放入ksoap2的jar包并导入
2.在xml 配置文件中加入:
3.接下来就要通过代码调用借口了
//返回结果字符串是一个xml格式的,即对应的soap响应结果 private void getData() throws JSONException { // 命名空间 String serviceNameSpace = “字符型”; // 请求URL String serviceURL = “字符型URL地址”; // 调用的方法 String methodName = “调用的NameMethod"; String soapAction = serviceNameSpace + methodName;//命名空间+调用方法 // 实例化序列化的Envelop SoapObject request = new SoapObject(serviceNameSpace(命名空间), methodName(调用方法名)); // 获得序列化的Envelop SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);//VER12 序列号和后台开发人员确定是多少 envelope.bodyOut = request;//有参数就加上参数 没有参数就不加了 // 设置是否调用的是dotNet开发的WebService envelope.dotNet = true; //true是.net false是java envelope.setOutputSoapObject(request); // Android传输对象 HttpTransportSE transport = new HttpTransportSE(serviceURL); transport.debug = true; try { transport.call(soapAction, envelope); // 获取返回的数据 Object object = envelope.getResponse(); result = String.valueOf(object); } catch (IOException e) { e.toString(); } catch (XmlPullParserException e) { e.printStackTrace(); } } 下面是我自己分装的基于Ksoap工具类
/** * @param url WebService服务器地址 * @param methodName WebService的调用方法名 * @param properties WebService的参数 */
public String callwebService1POST(String url, final String methodName, HashMapproperties) { // 实例化序列化的Envelop SoapObject request = new SoapObject(Constant.NameSpace, methodName); // 假设map是HashMap对象 // map中的key是String类型,value是Integer类型 String key , value; if (properties != null) { Iterator iter = properties.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); // 获取key key = (String) entry.getKey(); // 获取value value = (String) entry.getValue(); request.addProperty(key, value); } } Log.e("测试-我就是看看数据:", request.toString()); // 获得序列化的Envelop SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER12); envelope.bodyOut = request; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = true; //true是.net false是java envelope.setOutputSoapObject(request); // Android传输对象 HttpTransportSE transport = new HttpTransportSE(url); transport.debug = true; try { transport.call(Constant.NameSpace + methodName, envelope); // 获取返回的数据 Object object = envelope.getResponse(); String result = String.valueOf(object); //Log.e("FactoryResult:", String.valueOf(object)); return result; } catch (IOException e) { e.toString(); } catch (XmlPullParserException e) { e.printStackTrace(); } return null; }
在Activity中调用方法:
new Thread(new Runnable() { @Override public void run() { webServiceUtils = new WebServiceUtils(); String result = webServiceUtils.callwebService1POST(WebService_url, MethodName, HashMapproperties) try { resoScanJSON(result); } catch (JSONException e) { e.printStackTrace(); } } }).start();
在这多说一嘴,就是必须在子线程中运行。