先后调用webserivce的两个方法

51Crack 2014-07-16 10:58:30
在线程中调用webservice(ksoap2)已经实现
现在需要点击某按钮时先调用webservice的1个方法,等待结果后再调用另外1个方法,应该怎么异步实现呢?
...全文
163 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
51Crack 2014-07-16
  • 打赏
  • 举报
回复
除非重复那一堆代码,transport.call(soapAction, envelope); 两次
51Crack 2014-07-16
  • 打赏
  • 举报
回复
引用 1 楼 birdsaction 的回复:
直接在第一个webservice调用成功后,if else判断结果 继续调用第二个。 一个线程应该是够了。
按钮事件中,开启线程调用webservice,如何if else...
51Crack 2014-07-16
  • 打赏
  • 举报
回复
现在是这么调用,所以没想明白怎么取得方法1的结果后再执行方法2,帮忙优化下: strMethodName=“方法1"; StartThread(); strMethodName=“方法2"; StartThread();

private String strMethodName;

	private void StartThread() throws Exception
	{
		new Thread(MyGetInfo).start();
	}

Handler handler = new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            try{
            	Bundle data = msg.getData();
                String result = data.getString("value");
                if (msg.obj.toString().equalsIgnoreCase("方法1")){
                	//取得结果
                }
                else if (msg.obj.toString().equalsIgnoreCase("方法2")) {
                        //取得结果
                }
        	} 
        	catch (Exception e) 
        	{
        	}
        }
    };

Runnable MyGetInfo = new Runnable()
    {
    	@Override
        public void run()
        {
            String result = "";
            try
            {
            	//命名空间
                String nameSpace = "http://test.com/";
                //调用的方法名称
                String methodName = strMethodName;
                //EndPoint
                String endPoint = "http://" + ServerIp + ":13188/Service.asmx";
                //SOAP Action
                String soapAction = nameSpace + strMethodName;
                //指定WebService的命名空间和调用的方法名
                SoapObject rpc = new SoapObject(nameSpace, methodName); 
                //生成调用WebService方法的SOAP请求信息,并指定SOAP的版本  
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
                envelope.encodingStyle = "UTF-8";
                envelope.bodyOut = rpc;
                //设置是否调用的是dotNet开发的WebService
                envelope.dotNet = true;
                envelope.bodyOut = rpc;
                //等价于envelope.bodyOut = rpc;
                //envelope.setOutputSoapObject(rpc);
                HttpTransportSE transport = new HttpTransportSE(endPoint);
            	//transport.debug = true;
                // 调用WebService
                transport.call(soapAction, envelope);
                // 获取返回的数据
                SoapObject object = (SoapObject) envelope.bodyIn;
                // 获取返回的结果
                result = object.getProperty(0).toString();
            }
            catch (Exception e)
            {
            	result = "error:" + e.toString();
            }
            finally
            {
                   Message msg = new Message();
                    Bundle data = new Bundle();
                    data.putString("value",result);
                    msg.setData(data);
                    msg.obj = strMethodName;
                    handler.sendMessage(msg);
            }
        }
    };
qcxl 2014-07-16
  • 打赏
  • 举报
回复
支持下1# 我目前手头项目是基于phonegap开发,里面也涉及到调用webservice 基本思路像1#所说,我的界面用html5写的, 使用ajax调用webservice: $.ajax({//调第一个 。。。。 success: function (data, textStatus) { if(....){//在某个条件情况下调用第二个 $.ajax({ 。。。。 success: function (data, textStatus) {} } }
Birds2018 2014-07-16
  • 打赏
  • 举报
回复
直接在第一个webservice调用成功后,if else判断结果 继续调用第二个。 一个线程应该是够了。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧