Search code examples
c#androidweb-servicesksoap2

Passing string array to c# web service (Android Ksoap2)


Hi so i've been searching google for a while and but can't seem to have a solid example for this. I've been working with webservice this past few days with android and I can succesfully pass parameters from android and consume it back with ksoap with no problems. But now I need to pass an array to a webservice. So heres my sample web service:

[WebMethod]
public string Sample(string[] logs)
{
    return array[0];
}

And this is the XML that I need to generate:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Sample xmlns="http://MTKAndroidService.org/">
      <array>
        <string>string</string>
        <string>string</string>
      </array>
    </Sample>
  </soap:Body>
</soap:Envelope>

I've been stuck with this for a while now and hope someone can help me.


Solution

  • Finally Got it....for those who is stuck on this also ill post my answer

    public String Sample()
        { 
            String SOAP_ACTION = "http://MTKAndroidService.org/Sample";
            String METHOD_NAME = "Sample";
    //      URL =  "http://10.0.2.2:49923/Service1.asmx";   // to be adjusted to the URL above once this code is added into WebService;
            String IP_LIST="";
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
            List<String> logs =  new ArrayList<String>();
            logs.add("hello");
            logs.add("world");
            SoapObject soapLogs = new SoapObject(NAMESPACE, "logs");
            for (String i : logs){
                soapLogs.addProperty("string", i);
            }
            request.addSoapObject(soapLogs);
    
            SoapSerializationEnvelope IPenvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            IPenvelope.dotNet = true;
            IPenvelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    
                try 
                {
                    androidHttpTransport.call(SOAP_ACTION, IPenvelope);
                    SoapPrimitive response = (SoapPrimitive)IPenvelope.getResponse();
                    Log.i("myApp", response.toString());
                    IP_LIST= response.toString();
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
                return IP_LIST;
        }