如果对WebService一无所知的话,建议先看看这两篇博客,对你WebService很有帮助。
http://blog.csdn.net/eyu8874521/article/details/9125987
http://blog.csdn.net/xiaanming/article/details/16871117
本人也是菜鸟一名,WebService已经是很老的技术了,但现在仍有使用,刚开始接触的时候,是无从入手呀,看了上面几篇文章以后,渐渐的会使用了,这里感谢网上开源的作者和文章,网上基本没有封装的,这里通过这个项目下来,学会了封装,虽然不难,但对于我这种刚出道的菜鸟来说,还是很不容易的,这里记录下来,希望也能帮助到其他的同行。实践才是检验真理的唯一标准,全部代码如下,有注释:
package com.example.applicationicon; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpResponseException; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.os.Handler; import android.os.Message; /** * 访问WebService的工具类 * * * @author caijin * */ public class WebServiceUtils { public static final String WEB_SERVER_URL = ""; // 含有3个线程的线程池 private static final ExecutorService executorService = Executors .newFixedThreadPool(3); // 命名空间 private static final String NAMESPACE = ""; /** * * @param url * WebService服务器地址 * @param methodName * WebService的调用方法名 * @param properties * WebService的参数 * @param webServiceCallBack * 回调接口 */ public static void callWebService(String url, final String methodName, HashMap<String, String> properties, final WebServiceCallBack webServiceCallBack) { // 创建HttpTransportSE对象,传递WebService服务器地址 final HttpTransportSE httpTransportSE = new HttpTransportSE(url); // 创建SoapObject对象 SoapObject soapObject = new SoapObject(NAMESPACE, methodName); // SoapObject添加参数 //写真实的变量名也没有用,传递参数必须是arg开头,必须是arg0 ,arg1 一直拍下去 if (properties != null) { for (Iterator<Map.Entry<String, String>> it = properties.entrySet() .iterator(); it.hasNext();) { Map.Entry<String, String> entry = it.next(); soapObject.addProperty(entry.getKey(), entry.getValue()); } } // 实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号 //tomcat 7.055 for 64 jdk 1.6 for 64 web3.0 这里写 ver12 ,如果是ver11会报 http 415错误 final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope( SoapEnvelope.VER12); // 设置是否调用的是.Net开发的WebService soapEnvelope.bodyOut = soapObject; soapEnvelope.dotNet = false;//如果调用的是.Net的WebService,这里为true,否则为false,不然调用会不成功 soapEnvelope.setOutputSoapObject(soapObject); httpTransportSE.debug = true; // 用于子线程与主线程通信的Handler final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // 将返回值回调到callBack的参数中 webServiceCallBack.callBack((Object) msg.obj); } }; // 开启线程去访问WebService executorService.submit(new Runnable() { @Override public void run() { Object resultSoapObject = null; try { httpTransportSE.call(WEB_SERVER_URL + methodName, soapEnvelope); if (soapEnvelope.getResponse() != null) { // 获取服务器响应返回的SoapObject resultSoapObject = (Object) soapEnvelope.bodyOut; } } catch (HttpResponseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } finally { // 将获取的消息利用Handler发送到主线程 mHandler.sendMessage(mHandler.obtainMessage(0, resultSoapObject)); } } }); } /** * * * @author caijin * */ public interface WebServiceCallBack { public void callBack(Object result); } }
最后附上下载地址,有需要的可以前去
http://download.csdn.net/detail/u014727709/9691554
这里补充一下访问webservice需要的jar包
http://download.csdn.net/detail/u014727709/9692823
欢迎start,欢迎评论,欢迎指正