Android开发之WebService篇
来源:互联网 发布:amtemu mac使用方法 编辑:程序博客网 时间:2024/05/16 09:59
昨天有同学在网上问我,Android怎样调用WebService接口。我还是两年前调用的WebService接口, 现在把原先的代码翻出来,截图给他看了,现在也总结下吧。
1.使用jar:ksoap2
下载地址网上多的是,自己百度下载个,as easy as ABC!
2.封装个Util类吧
public class WebServiceUtils { public static final String WEB_SERVER_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; // 含有3个线程的线程池 private static final ExecutorService executorService = Executors .newFixedThreadPool(3); // 命名空间 private static final String NAMESPACE = "http://WebXml.com.cn/"; /** * * @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添加参数 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协议的版本号 final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); // 设置是否调用的是.Net开发的WebService soapEnvelope.setOutputSoapObject(soapObject); soapEnvelope.dotNet = true; httpTransportSE.debug = true; // 用于子线程与主线程通信的Handler final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // 将返回值回调到callBack的参数中 webServiceCallBack.callBack((SoapObject) msg.obj); } }; // 开启线程去访问WebService executorService.submit(new Runnable() { @Override public void run() { SoapObject resultSoapObject = null; try { httpTransportSE.call(NAMESPACE + methodName, soapEnvelope); if (soapEnvelope.getResponse() != null) { // 获取服务器响应返回的SoapObject resultSoapObject = (SoapObject) soapEnvelope.bodyIn; } } catch (HttpResponseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } finally { // 将获取的消息利用Handler发送到主线程 mHandler.sendMessage(mHandler.obtainMessage(0, resultSoapObject)); } } }); } public interface WebServiceCallBack { public void callBack(SoapObject result); }}
说明:
- 搞个线程池去请求数据
executorService.submit
- 获取数据后通过Handler 调度
mHandler.sendMessage(mHandler.obtainMessage(0,resultSoapObject));
- 搞个接口回调
webServiceCallBack.callBack((SoapObject) msg.obj);
2.使用
//通过工具类调用WebService接口 WebServiceUtils.callWebService(WebServiceUtils.WEB_SERVER_URL, "getSupportProvince", null, new WebServiceCallBack() { //WebService接口返回的数据回调到这个方法中 @Override public void callBack(SoapObject result) { //关闭进度条 ProgressDialogUtils.dismissProgressDialog(); if(result != null){ SoapObject provinceSoapObject = (SoapObject) result.getProperty("getSupportProvinceResult"); String Str= provinceSoapObject.toString() ; }else{ Toast.makeText(MainActivity.this, "获取WebService数据错误", Toast.LENGTH_SHORT).show(); } } });
使用方法很简单,没有必要解释什么。可以稍微扩展下:
- 请求前后可以加个进度条,提示数据正在请求中
- 这个回调方法的话,可以加个状态码,在请求错误的时候可以通过返回的状态码去友好处理
- 这个WebService请求的话,底层是可以使用okhttp的,网络请求更快捷
- 这个线程池的话,这里固定写的是3个线程。大家可以根据手机的实际配置去动态申请线程数量,不过一般情况下这样写也够用了
- 这个Handler 也改成弱引用吧
- 真的没有什么好写的了,就写到这里吧
1 0
- Android开发之WebService篇
- android之webservice开发
- Android开发之WebService
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Android开发之WebService介绍
- Oracle 11g 新特性 -- 自动诊断资料档案库(ADR) 说明
- 前后台系统和RTOS系统
- Node.js 做一个表单提交的demo
- Carthage:使用Carthage安装Swift第三方库
- 是Android网络优化
- Android开发之WebService篇
- android WebView加载淘宝天猫页面报找不到网址的错误
- Jenkins详细安装与构建部署使用教程
- XML解析方法SAX (Java)
- 类似于友盟分享登录的高度封装、精简、易拓展库
- MongoDB的初次相遇(四)
- OpenNI的安装与配置
- AngularJS1.0的使用总结笔记------003
- Activity和Fragment用Intent和Bundle传递参数--总结