2010-06-14 43 views
5

使用kso​​ap2 lib從android調用.net SOAP1.1 web服務我遇到了將自定義對象強制轉換爲響應的問題。例如下面的代碼在httpTransport.call(soapAction,soapEnvelope)後稱爲正確;並在裏面有數據。但是我不能將它轉換爲SoapObject或Vector的特定對象,正如我在幾個例子中看到的,我得到了CastException或簡單的東西。 如果有人知道如何處理它,請幫助。ksoap2 cast 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; 
} 

回答

5

首先嚐試看看您是否收到任何回覆。

Object obj = envelope.bodyIn; 

如果此obj不爲空,則嘗試以下操作。

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

我的猜測是這應該工作,如果你得到一些迴應。

您需要告訴kSOAP對象是什麼StatusSettinghow將SOAP響應轉換爲StatusSetting對象。

+0

謝謝,它的工作原理,我在SoapObject數據。你可以給一個方向如何解析SoapObject。我的意思是讀取屬性,並尋找我需要的數據。我試圖得到resultsRequestSOAP.properties它的工作原理(它得到像json數據)在調試模式,但屬性不是打開方法在代碼中使用。 – Maxim 2010-06-15 09:32:53

+0

我知道兩種分析SoapObject的方法。 1.實現'org.ksoap2.serialization.Marshal'接口並註冊相應的SOAP標籤。 2.另一種方法是使用SoapObject的getProperty()和getAttribute()方法來獲取相應的值。 HTH。 – 2010-06-15 14:15:30

+0

也看看這個。 http://www.drdobbs.com/article/printableArticle.jhtml;jsessionid=OKCYS4LV2OQDPQE1GHPCKHWATMY32JVN?articleId=208800166&dept_url=/mobility/ – 2010-06-15 14:17:52

1

我希望這將是對你有幫助:

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

類似的東西:

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"); 
    } 
}