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; }