首页 > 系统 > Android > 正文

android调用WebService实例分析

2020-04-11 11:23:49
字体:
来源:转载
供稿:网友

本文实例讲述了android调用WebService的方法。分享给大家供大家参考。具体如下:

WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的有Ksoap2,可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。

java代码如下:

package com.arg;import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; public class CallWebServiceActivity extends Activity {  //显示结果的listview   ListView listView=null;   //输入文本框   EditText provinceEdit=null;   //用于存放数据的集合list   List<Map<String, Object>> data=null;   //提示对话框   ProgressDialog myDialog=null;   //搜索按钮   Button searchButton=null;  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   //获得文本输入框   provinceEdit=(EditText) this.findViewById(R.id.provinceEdit);   //获得搜索按钮  searchButton=(Button) this.findViewById(R.id.searchButton);  //为搜索按钮添加单击监听事件   searchButton.setOnClickListener(new OnClickListener(){    public void onClick(View v) {      //响应按钮单击事件的函数      ResponseOnClick();     }  }); } //响应按钮单击事件的函数  public void ResponseOnClick(){   //创建一个线程   HttpThread thread=new HttpThread(handler);   //构造请求参数   HashMap <String ,Object> params=new HashMap<String ,Object>();   try{    CharSequence etValue=provinceEdit.getText();    String name="";    if(etValue!=null){     //字符转码     name=new String(etValue.toString().getBytes(),"UTF-8");   }    params.put("byProvinceName", name);   }catch(Exception ex){    ex.printStackTrace();   }   //   String url="http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx";   // String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx";   String nameSpace = "http://WebXml.com.cn/";   String methodName = "getSupportCity";   // 开始新线程进行WebService请求   thread.doStart(url, nameSpace, methodName, params);  }  /**  * 捕获消息队列  *  */  Handler handler=new Handler(){   public void handleMessage(Message m){    ArrayList <String> myList=(ArrayList<String>)m.getData().getStringArrayList("data");    if(myList !=null){     if(data !=null){      data.clear();     }else{      data=new ArrayList<Map <String, Object>>();     }     for(int i=0;i<myList.size();i++){      Map<String, Object> item=new HashMap<String, Object>();      item.put("text", myList.get(i));      data.add(item);     }     /**     * 列表显示     *     */     SimpleAdapter simpleAdapter=new SimpleAdapter(CallWebServiceActivity.this     ,data,R.layout.listlayout,new String[] {"text"},new int []{R.id.showData});     listView=(ListView) findViewById(R.id.showListView);     listView.setAdapter(simpleAdapter);    }   }  };  /**  * 线程类  * @author Administrator  *  */  public class HttpThread extends Thread{   private Handler handle=null;   String url=null;   String nameSpace=null;   String methodName=null;   HashMap <String ,Object> params=null;   ProgressDialog progressDialog=null;   //构造函数   public HttpThread(Handler hander){    handle=hander;   }   /**   * 启动线程   */   public void doStart(String url, String nameSpace, String methodName,      HashMap<String, Object> params) {    // TODO Auto-generated method stub    this.url=url;    this.nameSpace=nameSpace;    this.methodName=methodName;    this.params=params;    progressDialog=ProgressDialog.show(CallWebServiceActivity.this, "提示","正在请求请稍等……", true);    this.start();    }   /**   * 线程运行   */   @Override   public void run() {    // TODO Auto-generated method stub    System.out.println("jack");    super.run();    try{     //web service请求     SoapObject result=(SoapObject) CallWebService();     //构造数据     ArrayList<String> list=null;     if(result !=null && result.getPropertyCount() > 0){      list=new ArrayList<String>();      for(int i=0;i<result.getPropertyCount();i++){       SoapPrimitive value=(SoapPrimitive) result.getProperty(i);       list.add(value.toString());     }      //a取消进度对话框      progressDialog.dismiss();      //构造消息      Message message=handle.obtainMessage();      Bundle b=new Bundle();      b.putStringArrayList("data", list);     message.setData(b);      handle.sendMessage(message);     }   }catch(Exception ex){    ex.printStackTrace();   }finally{   }  }  /**   * 请求web service   */   protected Object CallWebService(){    String SOAP_ACTION = nameSpace + methodName;    //创建SoapObject实例    SoapObject request=new SoapObject(nameSpace,methodName);    //生成调用web service方法的soap请求消息    SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);    //设置.net web service    envelope.dotNet=true;    //发送请求    envelope.setOutputSoapObject(request);    //请求参数    if(params != null && !params.isEmpty() ){     for(Iterator it=params.entrySet().iterator();it.hasNext();){      Map.Entry e=(Entry) it.next();      request.addProperty(e.getKey().toString(),e.getValue());     }    }   //   AndroidHttpTransport androidHttpTrandsport=new AndroidHttpTransport(url);   SoapObject result=null;   try{    //web service请求    androidHttpTrandsport.call(SOAP_ACTION, envelope);     //得到返回结果    result=(SoapObject) envelope.getResponse();   }catch(Exception ex){    ex.printStackTrace();   }    return result;   }  } }

希望本文所述对大家的Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表