2011-11-10 69 views
0

我想使用可用的ksoap庫將我的Android應用程序中的數組傳遞給SOAP Web服務。將數組傳遞到SOAP Web服務以插入遠程數據庫

我的數組是這樣的:

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

如何通過這個作爲參數傳遞給我的web服務調用?

任何人都可以幫我嗎?

這是我的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"; 
     } 
    } 
    } 

我的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

看到logcat我貼 –

+0

line no 334 is System.out.println(「----」+ responddata); –

+0

我的代碼:http://pastie.org/2840334 –

回答

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

編輯:

這是Android庫KSOAP2的一個已知問題,它目前根本不支持數組。問題的描述是在這裏:

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

第三方補丁,解決方案和示例可以在這裏找到:

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

看看這些鏈接,你可以找到你的答案上那。

謝謝。

+0

我知道如何做到這一點。我有一個類似的代碼。我沒有在這裏發佈,因爲這很常見。我想通過Web服務將我的數組作爲參數發送。該部分的其餘部分獲得響應和我所知道的..我只需要知道如何發送該數組 –

+0

如何使用請求。addProperty()方法發送我的數組?可能嗎? –

+0

檢查此:http://pastie.org/2840334並告訴我,我的代碼是否正確,因爲我收到異常 –

0

序列化到JSON或XML,發送JSON或XML服務器,解碼服務器上的JSON或XML。不確定你在案件中使用的確切方法。

+0

我已經創建了一個返回XML而不是JSON的SOAP Web服務。所以我需要在這裏將我的數組序列化爲XML並將其發送到服務器。在服務器上,我有以String []爲參數的Web服務並返回「成功」消息。可以這樣做嗎? –

相關問題