问题
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
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/8075626/pass-an-array-to-a-soap-web-service-for-inserting-into-remote-database