2013-10-05 76 views
5

您好,我需要將數組列表數據傳遞給soap web服務。到目前爲止,我有以下代碼。將ArrayList數據傳遞給Android中的SOAP Web服務

public class ResultActivity extends Activity { 
    public final String NAMESPACE = ""; 
    public final String URL = ""; 
    public final String SOAP_ACTION_1 = ""; 
    public final String METHOD_NAME_1 = ""; 

    ProgressDialog mProgressDialog; 
    SoapObject mSoapObjectCompanyDetailResponse; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.result); 

     System.out.println("Size In resxusr " + OnLineApplication.mParserResults.size()); 
     for (int i = 0; i < OnLineApplication.mParserResults.size(); i++) { 

      System.out.println("ID " + OnLineApplication.mParserResults.get(i).getCompanyId()); 
      System.out.println("Q " + OnLineApplication.mParserResults.get(i).getQuestion()); 
      System.out.println("A " + OnLineApplication.mParserResults.get(i).getAnswer()); 
     } 

     new insertResult().execute(); 
    } 

    public class insertResult extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      mProgressDialog = ProgressDialog.show(ResultActivity.this, "Wait", "Fetching"); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_1); 
      // request.addProperty("dt",""); 
      for (int i = 0; i < OnLineApplication.mParserResults.size(); i++) { 
       request.addProperty("CompanyID", 30); 
       request.addProperty("Question", OnLineApplication.mParserResults.get(i).getQuestion()); 
       request.addProperty("Answer", OnLineApplication.mParserResults.get(i).getAnswer()); 
      } 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

      try { 
       androidHttpTransport.call(SOAP_ACTION_1, envelope); 
       mSoapObjectCompanyDetailResponse = (SoapObject) envelope.bodyIn; 
       Object re = null; 
       re = envelope.getResponse(); 

       Log.i("myApp", mSoapObjectCompanyDetailResponse.toString()); 
       System.out.println("re " + mSoapObjectCompanyDetailResponse.toString()); 
       // mStringCompanyID=re.toString(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      if (mProgressDialog != null) { 
       mProgressDialog.dismiss(); 
      } 

     } 

    } 

} 

我的XML WSDL服務如下。

<wsdl:types> 
    <s:element name="insertResultUser"> 
    <s:complexType> 
     <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" name="dt"> 
     <s:complexType> 
     <s:sequence> 
     <s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax"/> 
      <s:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax"/> 
        </s:sequence> 
       </s:complexType> 
       </s:element> 
       </s:sequence> 
      </s:complexType> 
       </s:element> 
       <s:element name="insertResultUserResponse"> 
      <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="insertResultUserResult" type="s:string"/> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
    </s:schema> 
     </wsdl:types> 
     <wsdl:portType> 
    <wsdl:operation name="insertResultUser"> 
    <wsdl:input message="tns:insertResultUserSoapIn"/> 
     <wsdl:output message="tns:insertResultUserSoapOut"/> 
     </wsdl:operation> 
     </wsdl:portType> 

數據的以下結構是我需要如上所述傳遞給web服務。

dt=anyType{DocumentElement=anyType{questions=anyType{CompanyID=1; Question=what is android?; Answer=OS; }; 

questions=anyType{CompanyID=1; Question=what is android?; Answer=OS; }; 
questions=anyType{CompanyID=1; Question=what is android?; Answer=OS; }; 
questions=anyType{CompanyID=1; Question=what is android?; Answer=OS; }; 
    questions=anyType{CompanyID=1; Question=what is android?; Answer=OS; }; }; }; }; } 

當我運行上面的代碼,我不能到ArrayList數據發佈到服務器。在我的onCreate方法中,我可以打印我的Arraylist值。我該如何解決這個問題?

+0

是否引發任何錯誤?你使用哪種圖書館作肥皂?一些更多的信息會有幫助。 –

+0

這有什麼更新? –

+0

避免使用SOAP並開始使用RESTful服務實現。使用JSON或XML而不是嘗試傳遞ArrayList。 –

回答

1

試試這個代碼:

SoapObject request = new SoapObject(Wsdl_Target_NameSpace, 
      Method_Name); 
    for (int i = 0; i < Property_Key.size(); i++) { 
     request.addProperty(Property_Key.get(i), Property_Value.get(i)); 
    } 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 
    HttpTransportSE androidHttpTransport = null; 
    androidHttpTransport = new HttpTransportSE(Url_location); 
    androidHttpTransport.call(Soap_Action, envelope); 
    SoapObject results = (SoapObject) envelope.bodyIn; 
    Vector response = (Vector) envelope.getResponse(); 
相關問題