android使用webservice传递对象
2012-06-13 13:26:04 来源:WEB开发网核心提示: 平时网上有调用webservice天气预报的demo,讲的很详细,android使用webservice传递对象,但是天气预报的webservice传递的是简单数据类型,需要传递对象的时候就比较郁闷了,我所请求的webservice对象,服务器识别不了,先讲一下如何传递对象吧,我用到的方法是直接把对象序列化
平时网上有调用webservice天气预报的demo,讲的很详细,但是天气预报的webservice传递的是简单数据类型,需要传递对象的时候就比较郁闷了。先讲一下如何传递对象吧。
我用到的方法是直接把对象序列化,因为服务器端接受的不只有我的请求,所以不能用网上说的将对象装变为字符串的方法。
序列化对象的时候,要把对象实现KvmSerializable接口,直接实现Serializable接口是不行的。接口提供的几个方法都需要重写,下面给个我的例子,接口重写的话,可以按照例子中的意思写,很简单。
import java.util.Hashtable; import org.ksoap2.serialization.KvmSerializable; import org.ksoap2.serialization.PropertyInfo; public class ReqQueryPayOrder implements KvmSerializable { private String appSerialNo; private String appPayKey; public String getAppSerialNo() { return appSerialNo; } public void setAppSerialNo(String appSerialNo) { this.appSerialNo = appSerialNo; } public String getAppPayKey() { return appPayKey; } public void setAppPayKey(String appPayKey) { this.appPayKey = appPayKey; } @Override public Object getProperty(int arg0) { // TODO Auto-generated method stub switch (arg0) { case 0: return appSerialNo; case 1: return appPayKey; } return null; } @Override public int getPropertyCount() { // TODO Auto-generated method stub return 2; } public void getPropertyInfo(int arg0, @SuppressWarnings("rawtypes") Hashtable arg1, PropertyInfo arg2) { // TODO Auto-generated method stub switch (arg0) { case 0: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "appSerialNo"; break; case 1: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "appPayKey"; break; default: break; } } @Override public void setProperty(int arg0, Object arg1) { switch (arg0) { case 0: appSerialNo = arg1.toString(); break; case 1: appPayKey = arg1.toString(); break; default: break; } } }
ReqQueryPayOrder 有两个属性,分别为appSerialNo和appPayKey。目的就是把带有这两个属性的对象传递给webservice
然后就是按照网上说的方法进行请求webservice了,很简单,不多说了。就是将repo对象add进去,这里我提供两种方法,第一种简单一些,第二种可以设置一些参数。
SoapObject so = new SoapObject(NAMESPACE, METHOD_NAME); ReqQueryPayOrder rqpo = new ReqQueryPayOrder(); rqpo.setAppSerialNo(appSerialNo); rqpo.setAppPayKey(appPayKey);
so.addProperty("reqQueryPayOrder", rqpo); //第一种 <pre name="code" class="java">PropertyInfo pi = new PropertyInfo(); //第二种 pi.setName("reqQueryPayOrder"); // 传入的对象名.. pi.setValue(rqpo); pi.setType(rqpo.getClass()); so.addProperty(pi);
但是后来发现,我所请求的webservice对象,服务器识别不了,一直都是空对象。
从服务器方面打印出我请求的xml如下(我把网址过滤了)
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body><queryPayOrder xmlns="http://******/*****" id="o0" c:root="1"><reqQueryPayOrder i:type="d:anyType"><appSerialNo i:type="d:string">12345</appSerialNo><appPayKey i:type="d:string">999</appPayKey></reqQueryPayOrder></queryPayOrder><:Body><:Envelope>
Tags:android 使用 webservice
编辑录入:爽爽 [复制链接] [打 印]- ››Android 当修改一些代码时,使用什么编译命令可以最...
- ››Android 如何添加一个apk使模拟器和真机都编译进去...
- ››Android 修改Camera拍照的默认保存路径
- ››Android 如何修改默认输入法
- ››android开发中finish()和System.exit(0)的区别
- ››Android手势识别简单封装类
- ››android中查看项目数字证书的两种方法
- ››Android中获取IMEI码的办法
- ››android 相机报错 setParameters failed
- ››Android重启运用程序的代码
- ››Android为ListView的Item设置不同的布局
- ››android bitmap与base64字符串的互相转换
更多精彩
赞助商链接