こんにちは、配列リスト データを 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 値を出力できます。どうすればこれを解決できますか?