关于WebService的话题,作为一个Java屌丝,我想也不用多说了。只要读者是做"码农"这行的基本手到擒来。那么做为一个对Android不是很了解的屌丝"攻城狮"来说!那么初学 Android 这块WebService绝对是痛苦的。想必读者和我一样!痛苦不堪.我不像其他高大上的java高手那样,轻巧的就搞定了,然后贴出需要读者煞费苦心去看,结果又走进了死胡同!本屌,因为公司任务,必须要做!结果整整苦逼了我两个星期,最终老天不负有心人.星期五下午临下班,终于得到结果.....好辛苦的工作!如果读者还不是"码农",本屌由衷说一句:学挖掘机去吧。好了,废话太多了!开始说说代码。

ps:本屌不是给大家写论文,所以不想给读者介绍什么WebService!想知道什么是WebService的百度之。以下代码中,并不是完全案例,而是Clint端的逻辑片段。读者Copy时,同时本屌也希望多看看注释.

开始苦逼之路:

  1. 天才第一步,先找雀氏纸尿布。Android,貌似没有实现WebService的功能,我也不确定,反正我没有手写客户端的习惯。如果读者喜欢,那就自己动手吧。Googlo已经给Android WebService 客户端提供了Ksoap2-Android的项目。因此,我们的客户端需要导入Ksoap2的jar包。至于那些Asix1 、2,xfire、cfx那些,亲,我只能告诉你,那些包太多了,手机资源有限。所以我们用Ksoap2的jar包。下载地址:https://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly          (个人建议:请使用翻墙工具,因为这是国外的网站,原因:保密。因为我是少先队队员),打开后,在页面找到Directoris字样,选择你喜欢的Ksoap2的版本。本屌使用了2.5.4 (没法,上司要求,不能用太新,不过我自己偷偷试了一下最新的,基本没有问题。)然后再filename中选择对应的jar下载。
  2. 然后把jar包导入到工程,这里本屌不想多说.我用的是Android studio编译工具,好像有很多公司用的是Eclipse for andriod.如果读者不知道怎么把jar包导入到工程!还是老规矩,百度之。
  3. 上面的事情做完,那么接下来才是重头戏。1.熟悉,WebService的wsdl文档的内容..要熟悉到,知道你所需要命名空间和接口函数的入参和出参,如果入参和出参是复杂对象,那么也要知道对象在wsdl中的定义是什么。如果服务端是你的写的,那么这步就可以忽略。在definitions中可以找到命名空间。至于函数名和实例对象根据自己的需求寻找。
  4. 编写实体类                                                                                                                                                                                                                                                       
    package com.pki.g4b.testinter.webservice;import org.ksoap2.serialization.KvmSerializable;
    import org.ksoap2.serialization.PropertyInfo;import java.util.Hashtable;/*** Created by Administrator on 2014/11/4.*/
    public class UserInfo implements KvmSerializable {private String name;private String num;/*** 获取实体类属性的个数(这里返回的个数,必须和属性的个数一致,不然会导致Servre端获取不到参数)* @return 属性的个数*/@Overridepublic int getPropertyCount() {return 2;}@Overridepublic void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) {switch (i) {case 0:propertyInfo.type = PropertyInfo.STRING_CLASS;propertyInfo.name = "name";break;case 1:propertyInfo.type = PropertyInfo.STRING_CLASS;propertyInfo.name = "num";break;default:break;}}@Overridepublic void setProperty(int i, Object o) {switch (i) {case 0:name = o.toString();break;case 1:num = o.toString();break;default:break;}}@Overridepublic Object getProperty(int i) {switch (i) {case 0:return name;case 1:return num;default:return null;}}
    }<span style="font-family: Arial, Helvetica, sans-serif;">                                                                                                                        </span>
  5. import android.util.Log;import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.PropertyInfo;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;/*** Created by Administrator on 2014/11/3.*/
    public class TestClinet {//webservice 命名空间private static final String SERVICE_NAMESPACE = "http://service.ra.tca.topca.cn/";//webservice URL地址private static String SERVICE_URL = "WebService地址本屌不能提供,屌丝也有职业操守";//webservice 接口名private static final String METHOD_NAME = "接口名称本屌不能提供,屌丝也有职业操守";
    </span>public void getCertInfo(String subject) {CA_CSR ca = new CA_CSR();try {//指定webservice,Soap的请求对象//傻瓜理解方式:获取 namespace = SERVICE_NAMESPACE 的wsdl文档中,operation 节点// name = METHOD_NAME的函数,且转换成SoapObject对象。SoapObject request = new SoapObject(SERVICE_NAMESPACE, METHOD_NAME);//设置函数的入参//设置对象参数:第一种方式/*SoapObject userInfo = new SoapObject(SERVICE_NAMESPACE,"userInfo");userInfo.addProperty("name","test");userInfo.addProperty("num","test@163.com");request.addProperty("userInfo",  userInfo);*///设置对象参数:二种方式 1.初始化实体类UserInfo userInfo = new UserInfo();userInfo.setProperty(1,"test");userInfo.setProperty(4,"test@163.com");//2.将对象参数设置到Soap属性信息对象中PropertyInfo property = new PropertyInfo();//setName:userInfo必须对应WSDL文档中的形参property.setName("userInfo");//setValue:userInfo为实参property.setValue(userInfo);//将Soap属性信息对象加载到Soap的请求对象中request.addProperty(property);//对应接口的入参名称,与接口参数循序无关,名称对应即可request.addProperty("id", "test_id_No1");//初始化序列化的Envelope(信封)对象。//SoapEnvelope.VER11 需对应服务端的Soap版本号(至于怎么查询,本屌还不知道,我调用的也是// 别人公司的WebService,人家告诉我的.)SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = request;//dotNet这里要密切注意,本屌在这里被坑到晕头转向。// envelope.dotNet = true;那么服务端将接受不到参数值,至于为什么本屌大胆放肆的想//在调用.Net服务端是使用envelope.dotNet = true;调用非.Net服务端时用false;这个理论//还未证实,等我有空会实验的.envelope.dotNet = false;envelope.setOutputSoapObject(request);//Android HTTP传输对象//不要再用AndroidHttpTransport,这是一个过期的类 。在Ksoap2最新版中已经没有这个类了HttpTransportSE transport = new HttpTransportSE(SERVICE_URL);//设置在通讯传输数据时,是否支持debugtransport.debug = false;Log.i("test info messge", "begin call......");transport.call(SERVICE_NAMESPACE + METHOD_NAME, envelope);Log.d("************* result is :", envelope.bodyIn.toString());Log.i("test info messger", "end call......");} catch (Exception e) {e.printStackTrace();}}}
    
  6. 公司项目中也用了这块代码,所以不能全贴。以上代码,尽本人测试无数次,没有问题,如果读者套用到自己的工程中,出现逻辑异常,那么请仔细看看本屌所写的注释。

Android WebService 客户端 之 andriod ksoap2 WebService 复杂对象参数相关推荐

  1. WebService客户端添加SOAPHeader信息

    WebService客户端添加SOAPHeader信息 通过JAXBContext创建Marshaller对头信息进行解析为dom,获取WSBindingProvider,使用Headers.crea ...

  2. webservice客户端开发

    一.根据约定条件生成客户端 1.需要axis.jar包 2.调用 import org.apache.axis.client.Call; import org.apache.axis.client.S ...

  3. 如何使用soapUI模拟webservice客户端发送请求

    随着软件行业的发展,一个完成的系统已经不能使用简单的项目来完成,而是有多个项目之间相互协同工作,项目之间就需要进行即时通讯,现在比较流行的通讯方式是通过webservice服务.比较流程的webser ...

  4. 基于Axis服务端的webservice客户端实现

    之前开发webservice客户端的时候遇到一个使用Axis2开发接口的厂家,查资料把Axis1和Axis2客户端的开发方式总结如下: 基于Axis1服务端的客户端实现: /*** 使用Axis Ca ...

  5. WebService客户端开发(Axis2 1.5)

    WebService的客户端开发方式很多,如果单纯为了使用一个WebService,而不想依赖太多的框架,那么随便选择个WebService框架就可以了. 为了封装方便,代码复用,更好的性能,一般选择 ...

  6. Java笔记-JDK搭建WebService客户端其他调用方法

    项目如下 这里大部分代码和第一个客户端一样. package webservice.client;import webservice.WeatherServiceImpl;import javax.x ...

  7. 13.Axis创建webservice客户端和服务端

    转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...

  8. cmd命令生成webservice_根据wsdl文件生成WebService客户端代码

    有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...

  9. WebService客户端三种调用方式整理

    1 WebService基础 1.1 作用 1,       WebService是两个系统的远程调用,使两个系统进行数据交互,如应用: 天气预报服务.银行ATM取款.使用邮箱账号登录各网站等. 2, ...

最新文章

  1. 收藏 | 有哪些相见恨晚的科研经验?
  2. linux获取fifo中的数据数量,Linux select()和多个套接字的FIFO排序?
  3. Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images
  4. oracle误删表空间 无法关闭,oracle 误删表空间文件启动不了数据库的解决办法
  5. 管理信息系统的开发和管理
  6. 使用过滤统计信息解决基数预估错误
  7. vue上传文件php,php文件上传 – 前端开发,JQUERY特效,全栈开发,vue开发
  8. mysql映射超_Hibernate的映射类型 hibernate mysql映射类型
  9. 【 HDU - 2594 】Simpsons’ Hidden Talents(KMP应用,求最长前缀后缀公共子串)
  10. VBA SQL查询-记录集转数组
  11. c语言统计输入的字符数字的个数字,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  12. Angular Service
  13. 程序员输入法_解决Pycharm输入法不跟随光标
  14. mysql mha reference_MySQL MHA配置常见问题
  15. cactus java_Cactus入门
  16. 《软件体系结构》第三章 软件体系结构风格
  17. 在Ubuntu安装QT及相关环境配置
  18. python怎么把二维数组转化一维数组,python 二维数组转一维数组
  19. 如何增加百度收录量和友好度
  20. Python对象赋值和拷贝

热门文章

  1. 使用RubyMine调试CocosPod和插件源码
  2. 魏副业而战:夸克网盘拉新如何引流推广?3个方法,让你多赚5W+
  3. 用友NC BeanShell_未授权RCE
  4. html5未来五年就业前景,未来5年的就业市场会怎样?未来五年发展前景最好的行业...
  5. vue 项目统计网站pv uv
  6. Java 关键字之abstract用法
  7. C++实现已知二叉树前序遍历和中序遍历,求后序遍历
  8. ws(websocket)协议
  9. 31.驱动--输入子系统
  10. Servlet监听器