2016-08-13 57 views
0

當我試圖從一個信封得到Propertys我得到這個錯誤:獲取SOAP對象屬性的孩子的在Android Studio中

java.lang.RuntimeException: illegal property: Codigo 

但我有這個屬性,它是正確的,請參見下面的了SoapUI要求:

<CalcPrecoPrazoResponse xmlns="http://tempuri.org/"> 
    <CalcPrecoPrazoResult> 
     <Servicos> 
      <cServico> 
       <Codigo>40010</Codigo> 
       <Valor>17,20</Valor> 
       <PrazoEntrega>1</PrazoEntrega> 
       <ValorMaoPropria>0,00</ValorMaoPropria> 
       <ValorAvisoRecebimento>0,00</ValorAvisoRecebimento> 
       <ValorValorDeclarado>0,00</ValorValorDeclarado> 
       <EntregaDomiciliar>S</EntregaDomiciliar> 
       <EntregaSabado>S</EntregaSabado> 
       <Erro>0</Erro> 
       <MsgErro/> 
       <ValorSemAdicionais>17,20</ValorSemAdicionais> 
       <obsFim/> 
      </cServico> 
     </Servicos> 
    </CalcPrecoPrazoResult> 
    </CalcPrecoPrazoResponse> 

這是我嘗試獲得這些價值

try { 
     http.call(SOAP_ACTION, envelope); 
     SoapObject resposta = (SoapObject) envelope.getResponse(); 
     frt = new Frete(); 

     frt.setCodigo(Integer.parseInt(resposta.getProperty("Codigo").toString())); 
     frt.setValor(resposta.getProperty("Valor").toString()); 
     frt.setPrazoEntrega(resposta.getProperty("PrazoEntrega").toString()); 
     frt.setValorMaoPropria(resposta.getProperty("ValorMaoPropria").toString()); 
     frt.setValorAvisoRecebimento(resposta.getProperty("ValorAvisoRecebimento").toString()); 
     frt.setEntregaDomiciliar(resposta.getProperty("EntregaDomiciliar").toString()); 
     frt.setEntregaSabado(resposta.getProperty("EntregaSabado").toString()); 
     frt.setErro(resposta.getProperty("Erro").toString()); 
     frt.setMsgErro(resposta.getProperty("MsgErro").toString()); 
     frt.setValorSemAdicionais(resposta.getProperty("ValorSemAdicionais").toString()) 
     frt.setObsFim(resposta.getProperty("ObsFim").toString()); 


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

這是Android上的反應工作室當我打電話與字符串的WebService []返回

anyType{cServico=anyType{Codigo=40010; Valor=1720; PrazoEntrega=1; ValorMaoPropria=000; ValorAvisoRecebimento=000; 
     ValorValorDeclarado=000; EntregaDomiciliar=S; EntregaSabado=S; 
     Erro=0; MsgErro=anyType{}; ValorSemAdicionais=1720; obsFim=anyType{}; }; } 

我已經tryed這個解決方案,但這不是爲我工作... Android java.lang.RuntimeException: illegal property: while getting the string from SOAP Object(KSOAP2)

PS:我使用KSoap2 LIB

回答

0

Codigo,Valor和其他屬性是Servicos的子女,而不是anyType的直接財產。經由的Servicos對象的鏈如下所以訪問這些和cServico

SoapObject resposta = (SoapObject) envelope.bodyIn; 
SoapObject body = (SoapObject) resposta.getProperty(0); 
SoapObject subResposta = (SoapObject) body.getProperty("Servicos"); 
SoapObject subRespostaDois = (SoapObject) subResposta.getProperty("cServico"); 

只有然後使用subRespostaDois訪問soap消息屬性:

frt = new Frete(); 
frt.setCodigo(Integer.parseInt(subRespostaDois.getProperty("Codigo").toString())); 
frt.setValor(subRespostaDois.getProperty("Valor").toString());