• 技术文章 >Java >java教程

    android调用WebService实例分析

    高洛峰高洛峰2017-01-24 10:07:18原创621
    本文实例讲述了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程序设计有所帮助。

    更多android调用WebService实例分析相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:android WebService
    上一篇:Java程序员,最常用的20%技术有哪些? 下一篇:Spring 实现数据库读写分离的示例
    Web大前端开发直播班

    相关文章推荐

    • Java归纳总结之数组详解• Java经典技巧之实现多线程、线程同步• 详细整理java枚举的使用总结• 一起聊聊Java常用数据类型的输入输出• 详细解析Java反射机制原理和几种Class获取方式

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网