2010-06-14 17 views
5

Wywołanie usługi internetowej .net SOAP1.1 z androida przy użyciu biblioteki ksoap2 Wykryłem problem z rzutowaniem odpowiedzi na niestandardowy obiekt. Na przykład poniższy kod nazywa się poprawnie po httpTransport.call (soapAction, soapEnvelope); i mieć dane w środku. Ale nie mogę rzucić go do konkretnego obiektu ani do SoapObject ani Vector, jak widziałem w kilku przykładach, dostaję CastException lub nic prostego. Jeśli ktoś wie, jak sobie z tym poradzić, pomóż.odlewanie ksoap2 getResponse()

public StatusSetting[] GetAllStatuses(String installation){ 
    StatusSetting[] statuses = null; 
    String methodName = "GetAllStatuses"; 
    String soapAction = NAMESPACE + "/" + methodName; 
    SoapObject request = new SoapObject(NAMESPACE, methodName); 
    request.addProperty("installation", installation); 

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    soapEnvelope.dotNet = true; 
    soapEnvelope.setOutputSoapObject(request); 

    AndroidHttpTransport httpTransport = new AndroidHttpTransport(SERVICE_URL); 
    try { 
     httpTransport.call(soapAction, soapEnvelope); 
     statuses = (StatusSetting[])soapEnvelope.getResponse(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return statuses; 
} 

Odpowiedz

5

Najpierw sprawdź, czy otrzymujesz odpowiedź.

Object obj = envelope.bodyIn; 

jeśli to obj nie jest null następnie spróbuj wykonać następujące czynności.

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

Zgaduję, że to powinno zadziałać, jeśli otrzymujesz jakąś odpowiedź.

Musisz poinformować kSOAP, co to jest obiekt StatusSetting, a how przekształcić odpowiedź SOAP na obiekt StatusSetting.

+0

Dzięki, to działa, mam dane w SoapObject. Czy mógłbyś podać kierunek przetwarzania SoapObject? Mam na myśli odczytywanie właściwości i szukanie danych, których potrzebuję. Próbowałem uzyskać resultRequestSOAP.properties działa (robi się json danych) w trybie debugowania, ale właściwości nie jest otwarta metoda do użycia w kodzie. – Maxim

+0

Znam dwa sposoby analizowania SoapObject. 1. Wdrożyć interfejs 'org.ksoap2.serialization.Marshal' i zarejestrować odpowiedni znacznik SOAP. 2. Innym sposobem jest użycie - metody 'getProperty()' i 'getAttribute()' obiektu SoapObject w celu uzyskania odpowiednich wartości. HTH. –

+0

Spójrz na to. http://www.drdobbs.com/article/printableArticle.jhtml;jsessionid=OKCYS4LV2OQDPQE1GHPCKHWATMY32JVN?articleId=208800166&dept_url=/mobility/ –

1

Mam nadzieję, że będzie to pomocne dla Ciebie:

SoapObject result = (SoapObject) envelope.bodyIn; 
String response = result.getProperty(0).toString(); 
0

coś takiego:

SoapObject response = (SoapObject) envelope.getResponse(); 
    yourArray=new String[response.getPropertyCount()]; 

    for(int i=0;i<response.getPropertyCount();i++){  
     Object property = response.getProperty(i); 
     if(property instanceof SoapObject){ 
      SoapObject final_object = (SoapObject) property; 
      yourArray[i] = final_object.getProperty("YOUR_PROPERTY_NAME"); 
    } 
} 
Powiązane problemy