2013-05-27 4 views
1

Я получаю SOAP-ответ, который является немного сложным. Ответ таков:Как разобрать сложный ответ SOAP в KSOAP2

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <getDetailResponse xmlns="http://saiserviceapp.com/"> 
     <getDetailResult> 
     <UserDetail> 
      <UserID>int</UserID> 
      <VehicleID>int</VehicleID> 
      <UserName>string</UserName> 
      <VehicleNo>string</VehicleNo> 
      <ModelID>int</ModelID> 
      <VariantID>int</VariantID> 
      <Color>string</Color> 
      <DOP>dateTime</DOP> 
      <InsCompany>string</InsCompany> 
      <InsExpire>dateTime</InsExpire> 
      <ContactNo>long</ContactNo> 
      <DInsExpire>dateTime</DInsExpire> 
     </UserDetail> 
     <UserDetail> 
      <UserID>int</UserID> 
      <VehicleID>int</VehicleID> 
      <UserName>string</UserName> 
      <VehicleNo>string</VehicleNo> 
      <ModelID>int</ModelID> 
      <VariantID>int</VariantID> 
      <Color>string</Color> 
      <DOP>dateTime</DOP> 
      <InsCompany>string</InsCompany> 
      <InsExpire>dateTime</InsExpire> 
      <ContactNo>long</ContactNo> 
      <DInsExpire>dateTime</DInsExpire> 
     </UserDetail> 
     </getDetailResult> 
    </getDetailResponse> 
    </soap:Body> 
</soap:Envelope> 

Теперь, чтобы разобрать его я написал этот код:

resultRequestSOAP = (SoapObject)envelope.bodyIn; 
    SoapObject root = (SoapObject) resultRequestSOAP.getProperty(mStrProperty); 
    SoapObject childObj[] = new SoapObject[root.getPropertyCount()]; 
    for(int i = 0; i < root.getPropertyCount(); i++) 
    { 
     childObj[i] = (SoapObject) root.getProperty("UserDetail"); 
     vector.addElement(childObj[i].getProperty(3)); 
    } 

Здесь я получаю значение корня после преобразования в строку, как показано ниже:

anyType 
{ 
UserDetail= 
     anyType{ 
      UserID=10884; 
      VehicleID=507; 
      UserName=ffasdd; 
      VehicleNo=GJGJGJG; 
      ModelID=0; 
      VariantID=0; 
      DOP=0001-01-01T00:00:00; 
      InsExpire=null; 
      ContactNo=8888555522; 
      DInsExpire=0001-01-01T00:00:00; 
      }; 
    UserDetail= 
     anyType{ 
      UserID=10884; 
      VehicleID=508; 
      UserName=ffasdd; 
      VehicleNo=HGHGGHJ; 
      ModelID=0; 
      VariantID=0; 
      DOP=0001-01-01T00:00:00; 
      InsExpire=null; 
      ContactNo=8888555522; 
      DInsExpire=0001-01-01T00:00:00; 
      }; 
} 

Теперь из этого сложного ответа я хочу номера автомобилей и хочу их хранить в векторе. В настоящее время с моим кодом выше, я получаю первый набор ответов несколько раз. Значит, такое же транспортное средство не добавляется несколько раз в вектор.

Как решить эту проблему.

ответ

0

Я в состоянии решить эту проблему в поле ниже образом:

for(int i = 0; i < root.getPropertyCount(); i++) 
      { 
       Object property = root.getProperty(i); 
       if (property instanceof SoapObject) 
        { 
        SoapObject category_list = (SoapObject) property; 
        String strVehNo = category_list.getProperty("VehicleNo").toString(); 
        String strVehId = category_list.getProperty("VehicleID").toString(); 
        vector.addElement(strVehNo); 
        vector.addElement(strVehId); 
        } 
      } 
     } 
0

(SoapObject) root.getProperty("UserDetail"); всегда совпадает положение root

+0

Тогда что я должен изменить в приведенном выше коде. Так что я получу автомобиль нет. –

+0

Вы можете попробовать 'childObj [i] = (SoapObject) ((SoapObject) root.getProperty (i)). GetProperty (« UserDetail »);' – mromer

+0

http://stackoverflow.com/questions/41676538/how-to- use-dynamic-nav-service-anytype-response-in-android-side-with-ntlmtran можете ли вы предоставить свое ** ценное решение ** для этого. –

2

Я думаю, что этот код поможет вам.

int count = root.getPropertyCount(); 

for(int i=0; i< count; i++) 
{ 
    SoapObject response = (SoapObject) envelope.getResponse();       
    SoapObject root = (SoapObject) response.getProperty("UserDetail"); 
    String userID = (root.getPropertyAsString("UserID")); 
    String userName = (root.getPropertyAsString("UserName")); 
} 
+0

спасибо @Roxy ... его работы для меня. 'String Key = (s_deals11.getPropertyAsString (« Ключ »)); Строка No = (s_deals11.getPropertyAsString («Нет»)); String Name = (s_deals11.getPropertyAsString ("Name")); ' Я получил все значения, используя ваш код .... спасибо –

+0

код работает, но каждый раз, когда у меня есть только одно заданное значение ... означает повторить только сначала установить значения объекта ... можете ли вы предоставить какое-то решение для этого ... Спасибо –

+0

здесь мой код и ответ в деталях ... http://stackoverflow.com/questions/41676538/how-to-use-dynamics- nav-service-anytype-response-in-android-side-with-ntlmtran если у вас есть какое-то решение, тогда, пожалуйста, помогите. –