2013-10-05 10 views
5

こんにちは、配列リストのデータをSOAP Webサービスに渡す必要があります。これまでのところ、私は以下のコードを持っています。ArrayListデータをアンドロイドの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(); 
      } 

     } 

    } 

} 

My 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なサービス実装を使用しないようにしてください。 ArrayListを渡す代わりに、JSONまたはXMLを使用します。 –

答えて

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(); 
関連する問題