Android通过ksoap向webserice传递复杂类型数据
来源:互联网 发布:上海大学乐乎社区 编辑:程序博客网 时间:2024/06/05 15:32
Android客户端调用服务端的方法时需要提供方法需要的参数,这个参数可能是一个简单类型,如字符串或者int值,
也可能是服务端定义的一个复杂数据类型。同样的,服务端返回的可能是一个简单数据值,或者是一个复杂数据对象,
这里讲一下我的实现方法。部署了一个webservice:DiaryService.下面这张图是该服务的wsdl头部描述:
//创建请求,参数分别为Web服务访问地址、调用的方法,此处调用的是插入日志方法,需要传入一个日志对象 SoapObject request = new SoapObject("http://ws.apache.org/axis2", "insertDiary");//此处的url即为wsdl中的targetName HttpTransportSE androidHttpTransport = new HttpTransportSE("http://10.0.2.2:8080/axis2/services/DiaryService?wsdl"); //创建SoapObject,根据服务端的对象声明来封装数据 //这里比较关键,客户端不需要新建对象,可以直接将数据封装在SoapObjec对象中进行传递,至于序列化反序列化的工作,ksoap已经帮我们做了 //如果只是传递一个简单数据,而不是对象,则只需将数据通过addProperty封装到之前新建的SoapObject对象request中即可 SoapObject so = new SoapObject("http://vo.com.cn/xsd","Diary");//注意此处的路径 //封装日志数据,这里查看wsdl对于对象的描述,一个属性对应一个值进行封装 so.addProperty("date",new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date())); so.addProperty("theme",view1.getText().toString()); so.addProperty("content",view2.getText().toString()); //设置方法属性,前者为WSDL中方法的形参,后者为实参 request.addProperty("vo", so); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.bodyOut = androidHttpTransport; envelope.setOutputSoapObject(request); try { //提交 androidHttpTransport.call(null, envelope);} catch (IOException e) {e.printStackTrace();} catch (XmlPullParserException e) {e.printStackTrace();}
至于获得数据,如果传回的是一个简单的数据,比如一个String或者Int值,那么返回的数据中只有一个SoapObject对象,获得这个对象便可得到返回的值
如果传回的是一个复杂数据容器,那么得到的是一个树状结构,其中会有多个SoapObject对象,具体操作见下面代码:
if (envelope.getResponse() != null) { SoapObject result = (SoapObject) envelope.bodyIn; // result.getProperty("name");// name为属性的名称,如果是单条数据,则可以这样获得返回的数据//如果有多条数据,则可以这样获得数据int count = result.getPropertyCount();//获得SoapObject对象的个数for(int i=0;i<count;i++){ System.out.println("time", ((SoapObject)result.getProperty(i)).getProperty("date"));//获得时间属性值 System.out.println("title", ((SoapObject)result.getProperty(i)).getProperty("theme"));//获得主题属性值 System.out.println("info", ((SoapObject)result.getProperty(i)).getProperty("content"));//获得内容属性值 }}
- Android通过ksoap向webserice传递复杂类型数据
- android通过ksoap访问webservice方法传递一个复杂对象参数
- Android Parceable传递复杂类型数据
- Android通过Parcelable传递复杂的对象数据
- Android通过ksoap调用webservice
- Android通过Ksoap连接webservice
- Activity传递复杂类型的数据
- android之Intent复杂数据的传递(ArrayList<String>类型的数据)
- android之Intent复杂数据的传递一(Object类型的数据)
- android之Intent复杂数据的传递二(Object类型的数据)
- android之Intent复杂数据的传递(ArrayList<Object>类型的数据)
- C++通过Callback向C#传递数据
- C++通过Callback向C#传递数据
- 通过Intent向service传递数据
- C++通过Callback向C#传递数据
- android 怎样用AIDL Service 传递复杂数据
- Android四大组件之Service 远程服务 通过AIDL进行进程间复杂类型数据交换
- Android Studio开发基础之启动Service,并通过从Activity向Service传递数据
- GridView中根据CheckBox选中的行取出某列的值及计算数据列的总数
- android-jni与java参数传递(续集)
- 杭州B1公交成"公交宽带"样板 TD-LTE丰富人们移动生活
- DBUTILS的简单的插入和修改操作
- CopyMemory不同类型数据之间的复制
- Android通过ksoap向webserice传递复杂类型数据
- 第十二周任务一
- 解决vmesxi磁盘空间消失的现象
- 输入两个字符串,比如abdcc和abc,输出第二个字符串在第一个字符串中的连接次序
- 2012 OpenNI 环境/Kinect 安装教学
- 第十二周作业2
- 如何在Android系统源码中添加一个C项目?
- 【学习Android遇到的错误】Android 开发遇到 java.lang.NoClassDefFoundError 错误
- 第十二周任务二