Estou começando a usar este ksoap2, usei o metodo de exemplo para setar o texto de um textView para o valor do resultado, só que este metodo retorna um SoapObject, gostaria de saber como eu posso organizar este resultado e mostra-lo de forma ordenada. Pois do modo como estou fazendo ele retorna uma grande String com os valores corretos, mas não formatados
[code]private void obterListaDoWebService() {
try {
TextView texto = (TextView) findViewById(R.id.result);
// TextView que vai receber o valor final da soma;
SoapObject requisicao = new SoapObject(NAMESPACE, METHOD_NAME);
// Cria um SoapObject passando os parâmetros;
requisicao.addProperty("pData", "2012-04-01T18:13:00");
// Adiciona o valor do primeiro parâmetro do web service;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// Cria o envelope;
envelope.dotNet = true;
// Especifica que o web service utilizado é um .NET;
envelope.setOutputSoapObject(requisicao);
// Envia a requisição ao web service;
HttpTransportSE http = new HttpTransportSE(URL);
// Cria a comunicação com o local do web service;
http.call(SOAP_ACTION, envelope);
// Chama o web service passando o nome do NAMESPACE da aplicação
// ASP.NET mais o nome do metódo e o envelope;
envelope.implicitTypes = true;
SoapObject listaDataSet = (SoapObject) envelope.getResponse();
for (int i = 0; i < listaDataSet.getPropertyCount(); i++) {
SoapObject obj = (SoapObject) listaDataSet.getProperty(i);
//ArrayList<String>
listaDeResultados.add(obj.toString());
}
texto.setText(listaDeResultados.toString());
// Adiciono o resultado ao TextView criado;
} catch (Exception e) {
e.printStackTrace();
}
}[/code]
o que me trinca é isso > No StackOverflow, um cara me indicou usar o Json ou Gson, mas não faço idéia de como usar. É realmente necessario usar-los?
Logico que não por que usar isso se o resultado já está ai ! Por que complicar ??? nusssss.
Isso é falta de estudar os diversos jeitos de fazer a mesma coisa.
Ok. Vamos ao que interessa. notou que a sua informação está sequencianda dentro desse rotorno pelas tags Table=anyType{Tacharam Aqui está o seu resultado };
O que você tem a fazer é capturar essas propriedas no caso.
Indentepentemente quantas voltar (10, 20, 30) e percorer elas.
SoapObject listaDataSet = (SoapObject) envelope.getResponse();
int propertyGetRetornoWebCount = listaDataSet.getPropertyCount();
if ( propertyGetRetornoWebCount > 0){
for (int currentGetRetornoWebProperty = 0; currentGetRetornoWebProperty < propertyGetRetornoWebCount; currentGetRetornoWebProperty++) {
SoapObject objResultSoapObject = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject objSoapObject = new SoapObject(NAMESPACE, METHOD_NAME);
1º Modo //No caso veja em Debug se já é suficiente para você pegar essa propriedade > Table=anyType{Tacharam Aqui está o seu resultado :) };
objPedidoResultSoapObject = (SoapObject) listaDataSet .getProperty(currentGetRetornoWebProperty);
//Se for faça assim com todo o retorno. (Ai tu organiza do jeito que você quiser né ).
String codigo= objPedidoResultSoapObject .getPropertyAsString("USUARIO_CODIGO").toString();
2º Modo //No caso veja em Debug se já é suficiente para você pegar essa propriedade > Table=anyType{Tacharam Aqui está o seu resultado :) };
//Se não for continue assim
int propertyResultCount = objPedidoResultSoapObject .getPropertyCount();
if(propertyResultCount > 0 ){
for (int currentProperty = 0; currentProperty < propertyResultCount ; currentProperty ++) {
//Pegando Resultados Pertinentes ao Resultado de Valores da Ordem
objSoapObject = (SoapObject) objPedidoResultSoapObject .getProperty(currentProperty );
//Se for faça assim com todo o retorno. (Ai tu organiza do jeito que você quiser né ).
String codigo= objPedidoResultSoapObject .getPropertyAsString("USUARIO_CODIGO").toString();
}
}
}
SoapObject listaDataSet = (SoapObject) envelope.getResponse();
int propertyGetRetornoWebCount = listaDataSet.getPropertyCount();
if ( propertyGetRetornoWebCount > 0){
for (int currentGetRetornoWebProperty = 0; currentGetRetornoWebProperty < propertyGetRetornoWebCount; currentGetRetornoWebProperty++) {
SoapObject objResultSoapObject = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject objSoapObject = new SoapObject(NAMESPACE, METHOD_NAME);
objResultSoapObject = (SoapObject) listaDataSet .getProperty(currentGetRetornoWebProperty);
//Se não for continue assim
int propertyResultCount = objResultSoapObject .getPropertyCount();
if(propertyResultCount > 0 ){
for (int currentProperty = 0; currentProperty < propertyResultCount ; currentProperty ++) {
//Pegando Resultados Pertinentes ao Resultado de Valores da Ordem
objSoapObject = (SoapObject) objResultSoapObject .getProperty(currentProperty );
//Se for faça assim com todo o retorno. (Ai tu organiza do jeito que você quiser né ).
String codigo= objSoapObject .getPropertyAsString("USUARIO_CODIGO").toString();
}
}
}
[quote=rdgmnz]Cara vamos por partes. Primeiro, muito obrigado pela ajuda, e desculpe a ignorancia.
Mas infelizmente não funcionou aqui…
Vendo em Debug, o int propertyGetRetornoWebCount = listaDataSet.getPropertyCount(); retorna 2.
Sendo que tem muito mais registros.
Tem algum motivo especifico? voce ja viu isso acontecer?[/quote]
Pronto veja se dá certo.
Tinha uns erros corrigi.
Meu chefe estava perto !! kkkkkk hsuahsauhasushsau
SoapObject objSoapObject = new SoapObject(NAMESPACE, METHOD_NAME);
Essa propriedade getPropertyAsString. é priopria de SoapObject.
Depois é só capturar.
//Se for faça assim com todo o retorno. (Ai tu organiza do jeito que você quiser né ).
String codigo= objSoapObject.getPropertyAsString("USUARIO_CODIGO").toString();
[quote=rdgmnz]Maravilha, o servidor que eu estava testando esta fora do ar. Assim que der eu testo, mas brigadão mesmo cara.
Só uma duvida, não esta achando esta função .getPropertyAsString voce sabe o que pode ser?
[/quote]
E para a galera que tem a mesma duvida, ainda não consegui resolver de modo “oficial” mas fiz uma gambiarra que funcionou… enquanto eu não acho um jeito mais elegante este serve para o MEU proposito.
Desculpem pela nomenclatura de variaveis, sou bem ruin nisto.
//Pega a resposta e transforma em String
String teste2 = envelope.getResponse().toString();
//Faz uma substring a partir do primeiro USUARIO_CODIGO da outra String
String teste3 = teste2.substring(teste2.indexOf("USUARIO_CODIGO="));
//Lista de resultados
ListView listaUsuarios = (ListView) this.findViewById(R.id.result2);
final List<String> Lista = new ArrayList<String>();
//Para nao entrar em looping
boolean continuar = true;
while (continuar) {
teste3 = teste3.substring(teste3.indexOf("USUARIO_CODIGO="));
String codigo2 = "Codigo: " + teste3.substring(teste3.indexOf("USUARIO_CODIGO=") + 15,teste3.indexOf(";"));
teste3 = teste3.substring(teste3.indexOf(";") + 1);
codigo2 = codigo2 + " Nome: " + teste3.substring(teste3.indexOf("USUARIO_NOME=") + 13,teste3.indexOf(";"));
teste3 = teste3.substring(teste3.indexOf(";") + 1);
if (teste3.contains("USUARIO_CODIGO=")) {
continuar = true;
} else {
continuar = false;
}
Lista.add(codigo2);
}
Enfim, vou montando a string passo a passo, bem trabalhoso adimito. Mas nao achei outro meio.