我想使用可用的ksoap库将数组从我的Android应用程序传递到我的SOAP Web服务。
我的数组看起来像这样:
String[] values={"abc","def"};
如何将此参数作为参数传递给我的网络服务电话?
有人可以帮帮我吗?
这是我的网络服务代码:
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";
}
}
}
我的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
提前致谢
答案 0 :(得分:2)
这是阅读SOAP Web服务的示例代码,希望这对您有帮助,
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());
}
}
另见
Android Lists IV: Accessing and Consuming a SOAP Web Service I
The Droid Chronicles – Web Services: Using kSOAP2 to Pass Complex Objects
修改强>
这是KSOAP2 for Android库的一个已知问题,目前它只是不支持数组。问题描述如下:
http://code.google.com/p/ksoap2-android/issues/detail?id=19
可在此处找到第三方补丁,解决方案和示例:
http://people.unica.it/bart/ksoap2-patch/
查看这些链接,您可以找到答案。
感谢。
答案 1 :(得分:0)
序列化为JSON或XML,将该JSON或XML发送到服务器,在服务器上解码该JSON或XML。不确定您在案例中使用的确切方法。