android中webservice请求的异步回调封装(一)
来源:互联网 发布:淘宝一千零一夜 编辑:程序博客网 时间:2024/06/07 21:53
背景
其实从我本人来讲,我是抵制这个东西的webservice+ksoap请求效率低,不稳定,各种缺点。但是呢,公司还有一些老的项目在维护,为节约点时间,封装了一个简单的多线程改异步回调框架。
第一个版本没有用单例和建造者模式,随便写了一下,有时间再优化。
先看效果吧
WebserviceUtil w=new WebserviceUtil();//实例化webservice+ksoap工具类w.setMethodName("GetNodeAttributeListById");//设置webservice请求方法w.setUrl("http://........");w.addParams("id","1");//添加请求的kvw.addParams("sid", "3");w.setCallBack(new Wcallback() {//设置回调 @Override public void success(String s) { //成功时回调,UI线程。 Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show(); } @Override public void failed(String s) { //失败时回调 }});w.exec();//请求
这样一个简单的请求方法就出来了,下面分析如何实现
写回调接口
public interface Wcallback { void success(String s);//成功回调 void failed(String s);//失败时回调}
写工具类
public class WebserviceUtil {private Wcallback callBack;private String methodName,endPoint;private Map<String, String> request = new HashMap<String, String>();public void setMethodName(String methodName) { this.methodName = methodName;}public void setUrl(String endPoint) { this.endPoint= endPoint;}public void addParams(String id, String s) { request.put(id, s);}public void setCallBack(Wcallback callBack) { this.callBack = callBack;}public void exec() { new Thread(new Runnable() { @Override public void run() { String nameSpace = "*******"; String soapAction = nameSpace + methodName; SoapObject soapObject = new SoapObject(nameSpace, methodName); for (String key : request.keySet()) { soapObject.addProperty(key, request.get(key)); } SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOut = soapObject; envelope.dotNet = true; envelope.setOutputSoapObject(soapObject); HttpTransportSE transport = new HttpTransportSE(endPoint, 3000); try { transport.call(soapAction, envelope); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } Message message = mHandler.obtainMessage(); message.what = 1; String result = null; try { SoapObject object = (SoapObject) envelope.bodyIn; result = object.getProperty(0).toString(); } catch (Exception e1) { message.what = 2;//失败时 e1.printStackTrace(); } message.obj = result; mHandler.sendMessage(message); } }).start();}private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1: callBack.success(msg.obj.toString()); break; case 2: callBack.failed(msg.obj.toString()); break; default: break; } }};}
ok,搞定,一个简单的webservice请求框架就写好了,不用每个activity都写一个handle,一个请求了。
当然还有一些优化,比如单例、建造者模式、task机制等,下期再说。
0 0
- android中webservice请求的异步回调封装(一)
- java回调与异步网络请求的封装
- android Http异步请求封装
- android网络请求组件(一)OkHttp3的封装使用
- Android之封装好的异步网络请求框架
- Android的异步加载AsyncTask方式Http请求的封装(改进版)
- Android中Http请求类的封装
- Android中okhttp网络请求的封装
- Android简单封装类似JQuery异步请求
- Android简单封装类似JQuery异步请求
- Android异步请求通用封装类
- Android中应对封装好的数据库jar包请求Http数据的结果回调
- Android 项目(一):网络请求封装(一)
- IOS中如何异步加载图片(一)封装自己的ImageDownLoad类
- Android中封装Http请求
- AJAX异步请求封装
- Android中异步解析网络请求的URL
- Android常用异步请求AsyncTask的美中不足之处
- SonarQube与Eclipse配合
- MongoDB——理论基础
- AVLoadingIndicatorView
- UIViewController中addChildViewController的坑:viewWillAppear不调用
- 自定js方法增加回调函数
- android中webservice请求的异步回调封装(一)
- bash shell 登陆时的执行的用户脚本
- 06.ThreeJs开发指南-第六章-高级几何体
- rplidar使用hector_slam的hector_mapping geotiff创建地图方法(2)
- 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布
- jquery 根据值设置radio选中
- POJ 2104 K-th Number 主席树模板题
- Android studio 编译时Error:Configuration with name 'default' not found
- JS代码段记录