这两天给老师做地铁app的demo,与后台的交互要用WebService,还挺麻烦的。所以想写点,希望有用。

  Web Services(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包含、自描述和模块化的应用程序,它可以在网络中被描述、发布和调用,可以将它看作是基于网络的、分布式的模块化组件。它建立在HTTP,SOAP,WSDL这些通信协议之上,可以轻松的跨平台。

  我们用的WebService就是服务器公布的一个接口,连上之后可以交互。WSDL是一份XML文档,它描述了Web服务的功能、接口、参数、返回值等,便于用户绑定和调用服务。它以一种和具体语言无关的方式定义了给定Web服务调用和应答的相关操作和消息。

  比如我们内部的wsdl地址:http://172.16.1.59:8081/authpay/DataProcessBean?wsdl(这是内网的地址外面登不进去啦)。

    开头是这样,

 <wsdl:definitions xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://dataprocess.sw.hhjt.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="DataProcessBeanService" targetNamespace="http://dataprocess.sw.hhjt.com/">
<wsdl:types>
<xs:schema xmlns:tns="http://dataprocess.sw.hhjt.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://dataprocess.sw.hhjt.com/" version="1.0">
<xs:element name="Vey_Bnd_Req" type="tns:Vey_Bnd_Req"/>
<xs:element name="Vey_Bnd_ReqResponse" type="tns:Vey_Bnd_ReqResponse"/>
<xs:element name="Vey_Data_Col" type="tns:Vey_Data_Col"/>
<xs:element name="Vey_Data_ColResponse" type="tns:Vey_Data_ColResponse"/>
<xs:element name="Vey_Data_Send" type="tns:Vey_Data_Send"/>
<xs:element name="Vey_Data_SendResponse" type="tns:Vey_Data_SendResponse"/>
<xs:element name="Vey_Sell_Ticket" type="tns:Vey_Sell_Ticket"/>
<xs:element name="Vey_Sell_TicketResponse" type="tns:Vey_Sell_TicketResponse"/>
<xs:element name="Vey_Token_Download" type="tns:Vey_Token_Download"/>
<xs:element name="Vey_Token_DownloadResponse" type="tns:Vey_Token_DownloadResponse"/>

第一行有targetNamespace也即命名空间,在下面有调用的方法名称,比如我用了Vey_Token_Download,EndPoint一般是将WSDL地址末尾的"?wsdl"去除后剩余的部分;而SOAP Action通常为命名空间 + 调用的方法名称。

       // 命名空间
String nameSpace = "http://dataprocess.sw.hhjt.com/";
// 调用的方法名称
String methodName = "Vey_Token_Download";
// EndPoint
String endPoint = "http://172.16.1.59:8081/authpay/DataProcessBean";
// SOAP Action
String soapAction = "http://dataprocess.sw.hhjt.com/Vey_Token_Download";
//调用Service 成功之后 new Ticket 存入数据库 失败则告诉他失败了
SoapObject rpc = new SoapObject(nameSpace,methodName); BindTicket bt = new BindTicket();
bt.setProperty(4,simnum);
bt.setProperty(6, useraccount);
bt.setProperty(7, userpassword); PropertyInfo proInfo = new PropertyInfo();
proInfo.setName("arg0");
proInfo.setValue(bt);
proInfo.setType(bt.getClass());
// 设置需调用WebService接口需要传入的参数
rpc.addProperty(proInfo); // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOut = rpc;
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = false;
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc); HttpTransportSE transport = new HttpTransportSE(endPoint);
try {
// 调用WebService
transport.call(soapAction, envelope);
} catch (Exception e) {
e.printStackTrace();
} // 获取返回的数据
SoapObject object = (SoapObject) envelope.bodyIn;
// 获取返回的结果
// String result = object.getProperty("ret").toString();
String result = object.getProperty(0).toString();
Log.v("result", result);
String flag = result.split(";")[1].split("=")[1];
Log.v("flag",flag);
exMessage = result.split(";")[0].split("=")[1];
Log.v("exmessage",exMessage);

值类型的传递通过ksoap可以直接进行传递,这里就不多说了!利用ksoap,值类型的变量即可作参数,也可以当作返回值。

但是这里要传的是对象,要编写实体类,且按照参数序列化设置好,demo里的实体类就照搬了一下。

import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo; import java.util.Hashtable; public class BindTicket implements KvmSerializable { protected String bndReqDate;
protected String bndTcomAccount;
protected String bndTcomPass;
protected long bndTcomType;
protected String bndTelNo;
protected long bndUID;
protected String bndUserName;
protected String bndUserPass;
protected String isSelled;
protected String password; @Override
public Object getProperty(int i) {
switch (i){
case 0:
return bndReqDate;
case 1:
return bndTcomAccount;
case 2:
return bndTcomPass;
case 3:
return bndTcomType;
case 4:
return bndTelNo;
case 5:
return bndUID;
case 6:
return bndUserName;
case 7:
return bndUserPass;
case 8:
return isSelled;
case 9:
return password;
}
return null;
} @Override
public int getPropertyCount() {
return 10;
} @Override
public void setProperty(int i, Object o) {
switch (i){
case 0:
bndReqDate = o.toString();
break;
case 1:
bndTcomAccount = o.toString();
break;
case 2:
bndTcomPass = o.toString();
break;
case 3:
bndTcomType = Long.parseLong(o.toString());;
break;
case 4:
bndTelNo = o.toString();
break;
case 5:
bndUID = Long.parseLong(o.toString());;
break;
case 6:
bndUserName = o.toString();
break;
case 7:
bndUserPass =o.toString();
break;
case 8:
isSelled = o.toString();
break;
case 9:
password = o.toString();
break;
default:
break;
}
} @Override
public void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) {
switch (i){
case 0:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "bndReqDate";
break;
case 1:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "bndTcomAccount";
break;
case 2:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "bndTcomPass";
break;
case 3:
propertyInfo.type = PropertyInfo.LONG_CLASS;
propertyInfo.name = "bndTcomType";
break;
case 4:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "bndTelNo";
break;
case 5:
propertyInfo.type = PropertyInfo.LONG_CLASS;
propertyInfo.name = "bndUID";
break;
case 6:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "bndUserName";
break;
case 7:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "bndUserPass";
break;
case 8:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "isSelled";
break;
case 9:
propertyInfo.type = PropertyInfo.STRING_CLASS;
propertyInfo.name = "password";
break;
default:
break;
}
}
}

最后记得在AndroidManifest.xml中配置添加访问网络的权限

 <uses-permission android:name="android.permission.INTERNET" /> 

Android调用WebService的更多相关文章

  1. Android调用WebService(转)

    Android调用WebService WebService是一种基于SOAP协议的远程调用标准,通过 webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SD ...

  2. 纠正网上乱传的android调用Webservice方法。

    1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webser ...

  3. 第十五章:Android 调用WebService(.net平台)

    什么是webservice? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和 ...

  4. Android 调用webService(.net平台)

    什么是webservice? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和 ...

  5. 【Android进阶】Android调用WebService的实现

    最近想自己搞搞服务器,就从最简单的webservice开始吧 先上效果图 项目结构 开始贴代码,注释都有,有问题的请留言 MainActivity.java package com.example.w ...

  6. 网摘Android调用WebService

    这边特别注意调用的.net WCF 接口的绑定方式.以前一直用的wxHttpbinding,一直连不上.改成BasicHTTPbinding就能连上了 上篇文章已经对Web Service及其相关知识 ...

  7. android调用webservice接口获取信息

    我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数. 1.在lib中放入ksoap2的jar包 ...

  8. Android 调用 WebService

    1.WebService简介 PS:如果看完上面简介还不是很清楚的话,那么就算了,之前公司就用C#搭的一个WebService! 本节我们并不讨论如何去搭建一个WebService,我们仅仅知道如何去 ...

  9. ksoap2 android 调用WebService

    webService,soap,wsdl的基本概念? 详情请看维基百科 基于soap 1.1, soap 1.2 的请求和响应数据源 查找了很久都是基于json格式传输数据,但是最终还是找到了基于xm ...

随机推荐

  1. [(ngModel)]的实现原理

    讨论[(ngModel)]之前,先讲下属性绑定和事件绑定.   在属性绑定中,值从模型中流动到视图上的目标属性.[],通过把属性名放在方括号中来标记出目标属性.这是从模型到视图的单向数据绑定.   在 ...

  2. JDK1.8 HashMap 源码分析

    一.概述 以键值对的形式存储,是基于Map接口的实现,可以接收null的键值,不保证有序(比如插入顺序),存储着Entry(hash, key, value, next)对象. 二.示例 public ...

  3. Javaweb项目框架搭建-准备篇

    前言Java从大二开始学习到现在大四也有差不多两年了,但是由于之前一直在玩,没有认真学过,直到现在才开始重新学习.也是很凑巧,看到了黄勇老师的<架构探险>,于是便开始学习写Java Web ...

  4. Mysql FROM_UNIXTIME效率 VS PHP date()效率 数据说话!

    这几天在做数据统计,有几个统计图的需求是这样的: 按照年.月.日统计订单数量, 比方一年12个月,统计出1月多少订单,二月多少订单,按照这种模式统计. 但是数据库里存放的是 timestamp  的  ...

  5. 微信小程序注册

    小程序是一种新的开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验.开发者可以根据平台提供的能力,快速地开发一个小程序. 开放内容包括: 1.开放注册范围:企业.政府.媒体.其他组织: ...

  6. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  7. Linux 命令学习笔记

    文件基本操作 ls ,rm , mv , ln   ls ls [option] [files]   不带参数时,列出当前工作目录的内容 $ls   列出指定目录的内容 ls dir1 或个别文件 l ...

  8. Images.xcassets不能获取图片路径

    原文地址:http://www.jianshu.com/p/5358f587af38 Images.xcassets在app打包后,以Assets.car文件的形式出现在bundle中.其作用在于: ...

  9. 用gcc进行程序的编译

    在Linux系统上,一个档案能不能被执行看的是有没有可执行的那个权限(x),不过,Linux系统上真正认识的可执行文件其实是二进制文件(binary program),例如/usr/bin/passw ...

  10. Javascript不同浏览器差异及兼容方法

    原文链接:http://caibaojian.com/js-ie-different-from-firefox.html javascript的各种兼容就是为了解决不同浏览器的差异性,了解其中的差异能 ...