欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android调用WebService实例分析

程序员文章站 2023-11-04 13:54:22
本文实例讲述了android调用webservice的方法。分享给大家供大家参考。具体如下: webservice是一种基于soap协议的远程调用标准,通过webserv...

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

webservice是一种基于soap协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在android sdk中并没有提供调用webservice的库,因此,需要使用第三方的sdk来调用webservice。pc版本的webservice客户端库非常丰富,例如axis2,cxf等,但这些开发包对于android系统过于庞大,也未必很容易移植到android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的webservice客户端的sdk有一些,比较常用的有ksoap2,可以从进行下载;将下载的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程序设计有所帮助。