android调用WebService实例分析

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Android通过ksoap2传递复杂数据类型及CXF发布的webservice详细介绍

    Android通过ksoap2传递复杂数据类型及CXF发布的webservice详细介绍 最近在学校搞点东西,搞了2天的webservice,心累呀,今天中午和小伙伴终于弄通了,感觉就是一些细节问题没有注意到,啊,我的时间呀,进这么过去了,为了不让小伙伴们走弯路,我还是认真的把开发文档写一遍吧! 首先,如果我们要用CXF发布webservice用自定义类型的对象来当参数传递的话,我们应该先把这个类序列化一遍,下面就是我测试的代码,我创建了一个TGrade类,实现了KvmSerializable接

  • Android ksoap调用webservice批量上传多张图片详解

    Android ksoap调用webservice批量上传多张图片详解 这几天一直在开发app,哎呀,什么都是第一接触,想想自己自学Java,然后自学Android,一直没有放弃,曾想放弃的,但是想到爸妈供我上学,不能在宿舍里面玩游戏,加入学校实验室,一天没课就来着里学习,当然这里也有志同道合的人,一起努力一起进步!虽然大学这几年都在努力的学习技术,也没有参加什么活动的,更别说找个女伴了!还是老老实实的敲代码,成功给我带来巨大的潜能,新技术总是吸引着我.自己做项目,哎呀!好像说偏题了,言归正传吧

  • 在Android中调用WebService实例

    某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电:二是流量贵如金那.我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互.本文就给大家讲解在Android中如何调用远程服务器端提供的WebService. 既然是调用WebS

  • android中soap协议使用(ksoap调用webservice)

    如下面代码所示: 复制代码 代码如下: SoapObject request  = new SoapObject(serviceNamespace, methodName); SoapObject构造函数的两个参数含义为: serviceNamespace – 你的webservice的命名空间,既可以是 http://localhost:8088/flickrBuddy/services/Buddycast这样的,也可以是 urn:PI/DevCentral/SoapService这样的: m

  • Android 中利用 ksoap2 调用 WebService的示例代码

    去年刚刚工作的时候,第一个项目是要访问 WebService.由于没有接触过,查了很多资料,在别人代码的基础上稍微修改了一下,总算满足了自己的需求.最近整理电脑的时候,发现了这个 WebService 的访问类,怕哪一天需要的时候找不到了,干脆写在博客上吧,也给需要的人提供一个参考. 1.下载 ksoap2 的 jar 文件 下载地址:ksoap2-android-assembly-3.6.1-jar-with-dependencies.jar 下载完成后依赖到自己的项目中即可. 2.封装网络访

  • Android 通过webservice上传多张图片到指定服务器详解

    Android 通过webservice上传多张图片到指定服务器详解 当你浏览这个的时候相信你对webservice的基本应用已经有一定的了解了,若是还没有明白的小伙伴,可以看我前面写的文章点击打开链接,这几天在开发一款app,需要上传图片到指定服务器吧,但是我刚开始以为在网上面应该有这样的好文章的吧,结果我在网络上找了好多代码,在传递图片的过程中,遇到各种bug,真是国人的东西就是喜欢复制别人的,自己不动手检验一下代码的正确性,哎,我也是无语了,然后我决定花点时间来填补一下这个空缺,写了这一片

  • Android通过Webservice操作sqlserver数据库实例代码

    首页在AndroidManifest.xml中添加访问数据库权限 <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET" /> 在src中新建一个连接webservice的类,名字随意,这里叫做"HttpConnSoap".基本上这个类是固定的,要改的大多数就是webservice端

  • Android开发调用WebService的方法示例

    本文实例讲述了Android开发调用WebService的方法.分享给大家供大家参考,具体如下: WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService.PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Andr

  • 在Android中访问WebService接口的方法

    需要引入ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar 复制代码 代码如下: //WebService的命名空间 static final String namespace = "http://impl.service.suncreate.com"; //服务器发布的url static final String url = http://10.100.3.41/axis2/services/UploadService;

  • android调用WebService实例分析

    本文实例讲述了android调用WebService的方法.分享给大家供大家参考.具体如下: WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService.PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Androi

  • Android 调用WCF实例详解

    Android 调用WCF实例 1. 构建服务端程序 using System.ServiceModel; namespace yournamespace { [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")] public interface IHello { [OperationContract] string SayHello(); } } namespa

  • C#调用WebService实例开发

    一.基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册.简单的理解就是:webservice 就是放在服务器上的函数,所有人都可以调用,然后返回信息. 比如google就有一个web service ,你调用它就可以很容易的做一个搜索网站. 就像调用函数一样,传入若

  • C#调用WebService实例与开发教程(推荐)

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object A

  • PHP调用Webservice实例代码

    它是一个开源软件,是完全采用PHP语言编写的.通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发.NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响. 方法一:直接调用 复制代码 代码如下: <? include('NuSoap.php'); // 创建一个soapclient对象,参数是server的WSDL $c

  • js超时调用setTimeout和间歇调用setInterval实例分析

    本文实例分析了js超时调用setTimeout和间歇调用setInterval的用法.分享给大家供大家参考.具体如下: 今天看了javascript高级程序设计(第三版)一书,发现说setTimeout比setInterval更好,觉得的确如此.平时都是用setInterval多点,现在还是转一下思路了.又学习到了.分析如下: setTimeout包含两个参数,第一个参数是要执行的代码,第二个参数是时间. 第一个参数可以是字符串也可以是函数,但是推荐使用函数而不是字符串. 使用字符串相当于eva

  • android调用webservice接口获取信息

    我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数. 1.在lib中放入ksoap2的jar包并导入 2.在xml 配置文件中加入: <!-- 访问网络的权限 --> <uses-permission android:name="android.permission.INTERNET" /> 3.接下来就要通过代码调用借口了 String WSDL_URI

  • Jquery + Ajax调用webService实例代码(asp.net)

    webService中要实现ajax调用,则要加这句代码: // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释. [System.Web.Script.Services.ScriptService] 代码下载 /201008/yuanma/WebService2.rar 复制代码 代码如下: //无参数调用 $(document).ready(function() { $('#btn1').click(function() { $.ajax({ typ

  • jQuery 调用WebService 实例讲解

    1.首先建一个WebService程序 /// <summary> /// WebService1 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此

随机推荐