通过2天的摸索,从一开始用序列化-反序列化方式开始就没成功过,似乎是因为语言不同导致序列化不成功。后来就用RPC方式,可以获取单独对象,但是数组集合的获取没想到合理方式。最后只是简单的修改了下代码,通过Ksoap 的 soapobject 对象获取了集合
转载自:http://blog.csdn.net/xzd171/article/details/6236257
下面是服务端代码(webservice)
/// <summary>
/// Service1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// [SoapRpcService]//指定使用rpc方式
public class Service1 : System.Web.Services.WebService
{
// [SoapRpcMethod, WebMethod]//具体方法中也要指定rpc方式
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
// [SoapRpcMethod, WebMethod]//具体方法中也要指定rpc方式
[WebMethod]
public Person GetPerson()
{
Person p = new Person(1,"xzd",34);
return p;
}
// [SoapRpcMethod, WebMethod]//具体方法中也要指定rpc方式
[WebMethod]
public Person SetPerson(string name,int age)
{
Person p = new Person(1, name, age);
return p;
}
[WebMethod] //[SoapRpcMethod, WebMethod] 具体方法中也要指定rpc方式
public List<Person> GetPersonlist()
{
return PersonManager.GetPersonlist();
}
}
下面是客户端代码
TextView tvResult ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SoapObject request = new SoapObject("http://tempuri.org/", "GetPersonlist");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport ht = new AndroidHttpTransport("http://192.168.1.101/Service/Service1.asmx");
(new MarshalBase64()).register(envelope);//放着没错
tvResult = (TextView)findViewById(R.string.hello);
try {
ht.call("http://tempuri.org/GetPersonlist",envelope);
SoapObject soapObject = (SoapObject) envelope.getResponse();
String names="";
if(soapObject.getName()=="anyType")
{
for(int i=0;i<soapObject.getPropertyCount();i++)
{
SoapObject soapChilds =(SoapObject)soapObject.getProperty(i);
names+= soapChilds.getProperty("Name").toString()+","+
soapChilds.getProperty("Id").toString()+","+
soapChilds.getProperty("Age").toString();
}
}
tvResult.setText(names);
} catch (Exception e) {
// TODO Auto-generated catch block
tvResult.setText(e.getMessage().toString());
}
}
转载自:http://blog.csdn.net/xzd171/article/details/6236257