2010-06-14 36 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"); 
    } 
}