WEB开发网
开发学院手机开发Android 开发 android使用webservice传递对象 阅读

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>

1 2  下一页

Tags:android 使用 webservice

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接