0

我想使用可用的 ksoap 库将一个数组从我的 Android 应用程序传递到我的 SOAP Web 服务。

我的数组如下所示:

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

如何将此作为参数传递给我的 Web 服务调用?

谁能帮帮我?

这是我的网络服务代码:

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

我的日志猫:

   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

提前致谢

4

2 回答 2

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 列表 IV:访问和使用 SOAP Web 服务 I

Droid Chronicles – Web 服务:使用 kSOAP2 传递复杂对象

编辑:

这是 KSOAP2 for Android 库的一个已知问题,目前它根本不支持数组。问题描述在这里:

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

可以在此处找到第三方补丁、解决方案和示例:

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

查看这些链接,您可以找到答案。

谢谢。

于 2011-11-10T06:25:34.327 回答
0

序列化为 JSON 或 XML,将该 JSON 或 XML 发送到服务器,在服务器上解码该 JSON 或 XML。不确定您将在您的案例中使用的确切方法。

于 2011-11-10T06:15:57.670 回答