将ArrayList数据传递到android中的SOAP Web服务

时间:2013-10-05 12:51:26

标签: android web-services soap

您好,我需要将数组列表数据传递给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值。我怎么解决这个问题?

1 个答案:

答案 0 :(得分: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();