0

I want to pass an array from my Android application to my SOAP webservice using the ksoap libraries available.

My array looks like this:

String[] values={"abc","def"};

How to pass this as a parameter to my web service call?

Can anyone please help me out ?

This is my web service code :

  public class Service1 : System.Web.Services.WebService
   {
    [WebMethod]

    public String getnames(String[] values)
    {

        try
        {

            using (SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123"))
            {
                int count = 1;
                int rows = 0;

                myConnection.Open();
                foreach (string student in values)
                {
                    count++;
                    using (SqlCommand myCommand = new SqlCommand())
                    {
                        myCommand.Connection = myConnection;
                        myCommand.CommandText = "insert into record values(@pCount, @pStudent)";
                        SqlParameter param = myCommand.CreateParameter();
                        param.ParameterName = "@pCount";
                        param.Value = count;
                        myCommand.Parameters.Add(param);

                        param = myCommand.CreateParameter();
                        param.ParameterName = "@pSudent";
                        param.Value = student;

                        rows = myCommand.ExecuteNonQuery();
                    }
                }
            }
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return "an error occured";
        }


        return "success";
       }
     }
  }

my logcat :

   11-10 12:26:56.159: INFO/System.out(334):  ----null
   11-10 12:26:56.159: DEBUG/AndroidRuntime(334): Shutting down VM
   11-10 12:26:56.159: WARN/dalvikvm(334): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334): FATAL EXCEPTION: main
   11-10 12:26:56.179: ERROR/AndroidRuntime(334): java.lang.NullPointerException
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at com.example.display.call2(display.java:193)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at com.example.display$3.onClick(display.java:146)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at android.view.View.performClick(View.java:2408)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at android.view.View$PerformClick.run(View.java:8816)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at android.os.Handler.handleCallback(Handler.java:587)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at android.os.Handler.dispatchMessage(Handler.java:92)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at android.os.Looper.loop(Looper.java:123)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at android.app.ActivityThread.main(ActivityThread.java:4627)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at java.lang.reflect.Method.invokeNative(Native Method)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at java.lang.reflect.Method.invoke(Method.java:521)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
   11-10 12:26:56.179: ERROR/AndroidRuntime(334):     at dalvik.system.NativeStart.main(Native Method)
   11-10 12:26:56.189: WARN/ActivityManager(58):   Force finishing activity com.example/.display

Thanks in advance

Parth Doshi
  • 4,200
  • 15
  • 79
  • 129

2 Answers2

2

This is the sample code for reading SOAP web service, Hope this will help you,

private static String SOAP_ACTION = "http://tempuri.org/HelloWorld";

private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "HelloWorld";

private static String URL = "http://bimbim.in/Sample/TestService.asmx?WSDL";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Initialize soap request + add parameters
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);        

    //Use this to add parameters
    request.addProperty("Parameter","Value");

    //Declare the version of the SOAP request
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);

    //Needed to make the internet call
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    try {
        //this is the actual part that will call the webservice
        androidHttpTransport.call(SOAP_ACTION, envelope);
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Get the SoapResult from the envelope body.
    SoapObject result = (SoapObject)envelope.bodyIn;

    if(result != null){
        TextView t = (TextView)this.findViewById(R.id.resultbox);

        //Get the first property and change the label text
        t.setText("SOAP response:\n\n" + result.getProperty(0).toString());
    }

}

Also look at

Android Lists IV: Accessing and Consuming a SOAP Web Service I

The Droid Chronicles – Web Services: Using kSOAP2 to Pass Complex Objects

EDIT:

It is a known issue with the KSOAP2 for Android library, which at the moment simply does not support arrays. The issue description is here:

http://code.google.com/p/ksoap2-android/issues/detail?id=19

A third-party patch, solution and an example can be found here:

http://people.unica.it/bart/ksoap2-patch/

Look on these link, You can find your answer on that.

Thanks.

user370305
  • 108,599
  • 23
  • 164
  • 151
  • I know how to do this . I have a similar code. I didn't post it over here because that's quite common. I want to send my array over the web service as a parameter. The rest of the part to get response and all I know..I just need to know how to send that array – Parth Doshi Nov 10 '11 at 06:28
  • how to use request.addProperty() method to send my array ? Is it possible? – Parth Doshi Nov 10 '11 at 06:29
  • check this : http://pastie.org/2840334 and tell me whether my code is right because I am getting exceptions – Parth Doshi Nov 10 '11 at 06:56
  • I am getting Null Pointer Exceptions ..have a look at my web service code above and tell me if anything is wrong over der or in the Android code? – Parth Doshi Nov 10 '11 at 07:01
  • dude can u please come on chat – Parth Doshi Nov 10 '11 at 07:05
  • I need to explain certain things before I post the logcat over here to help u better understand the task I want to do in my project can u please come on chat ? – Parth Doshi Nov 10 '11 at 07:13
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/4862/discussion-between-parth-90-and-user370305) – Parth Doshi Nov 10 '11 at 07:19
  • i posted log cat check it out – Parth Doshi Nov 10 '11 at 07:21
0

Serialize to JSON or XML, send that JSON or XML to the server, decode that JSON or XML on the server. Not sure about the exact methods you would use in your case.

Jonathan Wilson
  • 4,138
  • 1
  • 24
  • 36
  • I have created a SOAP web service that returns XML and not JSON. So I need to Serialize my array over here to XML and send that to Server. On server i have the web service that takes in String [] as a parameter and returns a "success" message. Can it be done in this way ? – Parth Doshi Nov 10 '11 at 06:19