您的位置:首页 > 移动开发 > Objective-C

Web Service That Returns An Array of Objects With KSOAP

2013-08-30 14:47 531 查看
In my previous post, I wrote about an example of passing complex
objects with KSOAP. In this post, I will write about returning
arrays of objects with KSOAP.

If you want to know how to write a method that returns an array
of complex objects, look at this code:

public static Category[] GetAllCategories()
{
String MethodName = "GetAllCategories";
SoapObject response = InvokeMethod(URL,MethodName);
return RetrieveFromSoap(response);

}


Where the function InvokeMethod is :

public static SoapObject InvokeMethod(String URL,String MethodName)
{
SoapObject request = GetSoapObject(MethodName);
SoapSerializationEnvelope envelope = GetEnvelope(request);
return  MakeCall(URL,envelope,NAMESPACE,MethodName);
}


GetSoapObject() and GetEnvelope() are:

public static SoapObject GetSoapObject(String MethodName)
{
return new SoapObject(NAMESPACE,MethodName);
}
public static SoapSerializationEnvelope GetEnvelope(SoapObject Soap)
{
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Soap);
return envelope;
}


MakeCall() is :

/**
*
* @param URL - The complete URL where the web service resides
* @param Envelope - The envelope to be passed
* @param NAMESPACE - The web method namespace
* @param METHOD_NAME - The method name
* @return - SoapObject containing the resultset
*/
public static SoapObject MakeCall(String URL, SoapSerializationEnvelope Envelope, String NAMESPACE, String METHOD_NAME)
{
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
try
{
androidHttpTransport.call(NAMESPACE + METHOD_NAME, Envelope);
SoapObject response = (SoapObject)Envelope.getResponse();
return response;
}
catch(Exception e)
{
e.printStackTrace();

}
return null;
}


The most important part for retrieving the actual array of objects (in this case Category objects) is the following:

/**
*
* @param soap - represents the entering Soap object
* @return returns the list of categories extracted from the response
*/
public static Category[] RetrieveFromSoap(SoapObject soap)
{
Category[] categories = new Category[soap.getPropertyCount()];
for (int i = 0; i < categories.length; i++) {
SoapObject pii = (SoapObject)soap.getProperty(i);
Category category = new Category();
category.CategoryId = Integer.parseInt(pii.getProperty(0).toString());
category.Name = pii.getProperty(1).toString();
category.Description = pii.getProperty(2).toString();
categories[i] = category;
}
return categories;
}


NOTE: Do
not use VECTOR class type provided by KSOAP! It does not work.

I really copy-pasted this from Eclipse, but hope it helps. Please write if you need more help. I hope I saved you at least some nerves.

All the best.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐