2016-08-13 83 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());