Android端调用c#端的webservice——复杂数据类型传递


一、概述

相信许多android安卓初学者和我一样,一开始认为的android调用webservice不过是按照固定的模式修改一下

namespace和methodName就可以顺利的调用所需要的webservice。其实在真正的业务流程中,由于业务需求的不

同,普通的数据库对象所传递的数据已经不能满足一般的数据需求,所以我们要在webservice端拼接自己需要的对象

传递到客户端,但在android端使用ksoap2的解析方法并不能直接识别拼接对象,这就需要我们合理的规划好

webservice部的数据解析结构,才能清晰明了的得到数据和添加不同的数据对象。


二、规划webservice解析的程序结构

1.创建简单的构造函数,分为带参数和不带参数


2.进行相应的webservice调用的对象准备


3.进行调用,在调用之前,我们要对传递过来的对象进行Javabean形式的创建,传递过来的对象有很多种,我们给它

们创建一个父类SoapItem里面什么都不需要写,只是为了后面让代码可扩展一些。然后,所有传递过来的对象都根据

数据库对象的字段创建一个类并继承自SoapItem,而且所有的对象都要完成一个接口ConvertSoapItem,这个接口是

用来给每个对象添加一个解析对象的方法,使从webservice端传递过来的对象的解析过程都可以在自身的类里面完成

相当于是一个简单的封装


下面看一下两种简单的调用方法


在第二种需要返回结果的调用方法中,我们一律使用list来返回一个对象类表,把传递过来的soapobject传递给自己

相对应的自建对象并在内部解析后返回一个对象列表,下面可以看一下一个类的解析,就是把soapobject每个节点的

值拿出来赋给对象的一个字段,并不复杂



三、向webservice端传递复杂数据类型

1、自定义对象的传递

前面讲完了webservice端向android传递数据,下面我们来讨论一下当webservice端的一个方法需要的是一个自定义类

型的对象参数时我们该怎么办?我们这个时候就需要用到ksoap2中的一个自带接口KvmSerializable,对象完成这个

接口后需要完成4个未完成的方法


第一个方法就是用swith语句按顺序写你的自定义对象的字段名


第二个方法就是返回你变量个数


第三个方法就是规定你的每个变量的类型和名称


第四个方法就是为你的变量赋值

完成这四个方法以后还需要在webservice端创建一个一模一样的对象,但不需要完成KvmSerializable接口,注意对象

名大小写要区分,如下图所示:



2、数据集合的传递

在webservice在带有参数的数据库调用操作时,我们不可能每修改一条数据就调用一次webservice这样不仅不高效率

,而且会因为多次的网络通信而等待过长的时间从而降低用户体验,所以这个时候我们就需要一次性传递数据,但是

在ksoap2中并不支持数组的传递,所以我们要把集合包装秤一个自定义对象传递过去,我们创建一个类继承自

Vector,Vector自身是一个容器,和arraylist的用法差不多,置于其他的集合类能否这样做没有尝试,不做过多的评

论。Vector完成了KvmSerializable接口后里面没有参数怎么重写方法呢,可能这是很多人一开始的问题,其实这很好

理解,既然这是个容器,那你添加进来的数据不就是一个个自身的参数么,这样就好理解多了吧,不多说,上个例

子。



复杂类型数据的传递差不多就这些了吧,希望大家多多支持。

Tip:调用webservice的过程中如果要调用Toast显示信息一定要前后分别加上Looper.prepare()和Looper.loop(),不加

的话会造成队列的唯一性冲突。


猜你喜欢

转载自blog.csdn.net/u013407099/article/details/47972377