android中webservice请求的异步回调封装(一)

背景

其实从我本人来讲,我是抵制这个东西的webservice+ksoap请求效率低,不稳定,各种缺点。但是呢,公司还有一些老的项目在维护,为节约点时间,封装了一个简单的多线程改异步回调框架。

第一个版本没有用单例和建造者模式,随便写了一下,有时间再优化。

先看效果吧

WebserviceUtil w=new WebserviceUtil();//实例化webservice+ksoap工具类
w.setMethodName("GetNodeAttributeListById");//设置webservice请求方法
w.setUrl("http://........");
w.addParams("id","1");//添加请求的kv
w.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机制等,下期再说。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值