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程序设计有所帮助。

时间: 2024-12-02 15:24:16

android调用WebService实例分析的相关文章

android调用WebService实例分析_Android

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

在Android中调用WebService实例_Android

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

jQuery 调用WebService 实例讲解_jquery

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

jquery+ajax调用webservice 实例

jquery+ajax调用webservice 实例 本文章是利用了asp教程.net的webservice 与jquery 的ajax来做一个 ajax实例 <script language="网页特效"> $("document").ready(function(){        $("#mmlog").append("data");  //这句有效,页面上指定位置有数据        $("#bt

Android 调用WCF实例详解_Android

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

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

PHP调用Webservice实例代码_php技巧

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

js超时调用setTimeout和间歇调用setInterval实例分析_javascript技巧

本文实例分析了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