У меня есть веб-сервис java (soap), который я хочу использовать с клиентом android для этого, используя ksoap.
Мой веб-сервис дает ответ, который выглядит следующим образом:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:listealbumResponse xmlns:ns2="http://ws/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:album">
<annee>2008</annee>
<id>6</id>
<titre>Ninja Tuna</titre>
</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:album">
<annee>2008</annee>
<id>10</id>
<titre>Fine Music, Vol. 1</titre>
</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:album">
<annee>2004</annee>
<id>14</id>
<titre>Bob Acri</titre>
</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:album">
<annee>2009</annee>
<id>54</id>
<titre>Rated R</titre>
</return>
</ns2:listealbumResponse>
</S:Body>
</S:Envelope>
, который представляет собой список объектов
Чтобы вызвать мой веб-сервис, я использую этот код:
try{
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.setOutputSoapObject(Request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject result = (SoapObject)envelope.getResponse();
Когда я протестировал "результат" моего ответа, он получил только один объект, как я мог получить весь список и проанализировать его?
Проблема заключалась в том, что когда я разбираю ответ на мыло, у меня есть только первый объект списка, поэтому я меняю эту строку:
SoapObject result = (SoapObject)envelope.getResponse();
с:
SoapObject result = (SoapObject)envelope.bodyIn;
wiht, что я получил весь список, и я добавляю это
testValues = new String[result.getPropertyCount()];
for(int i= 0; i< result.getPropertyCount(); i++){
testValues[i] = result.getProperty(i).toString();
}
Удачи вам и спасибо Януш
код:
SoapObject result = (SoapObject)envelope.bodyIn;
String output = "";
for(int i= 0; i< result.getPropertyCount(); i++){
SoapObject object = (SoapObject)response.getProperty(i);
output += "annee : " + object.getProperty("annee") + "\n";
output += "id : " + object.getProperty("id") + "\n";
output += "titre : " + object.getProperty("titre") + "\n";
}
Результатом является одиночный SoapObject, однако эти объекты должны иметь свойство для каждого элемента в запрошенном списке. Вы можете сделать что-то подобное, чтобы получить все элементы:
private static List parseLists(List listItems, SoapObject response) {
int propertyCount = response.getPropertyCount();
for (int currentProperty = 0; currentProperty < propertyCount; currentProperty++) {
Object input = response.getProperty(currentProperty);
Object result = parseObject(input.toString());
if (result != null) {
listItems.add(result);
}
}
return listItems;
}