[Android] Ksoap: envio de lista de objetos

11 respostas
M

Olás,

Será que alguém teria algum exemplo de como enviar uma lista de objetos como parâmetro para uma operação de um WS feito em .net utilizando a API Ksoap2?

Consultei vários fóruns e tutoriais e ainda não consegui… Estou começando a ficar com o pé atrás, pois quase todo mundo tem problemas para enviar objetos e listas de objetos como parâmetros (com essa api)

Obrigado :wink:

11 Respostas

P

A little bit of the google:

http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/102/The-Minimum-Steps-to-utilize-KSOAP2.aspx

M

pedrohms:
A little bit of the google:

http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/102/The-Minimum-Steps-to-utilize-KSOAP2.aspx

Olá Pedro! Dei uma olhada neste artigo, mas ele não responde minha dúvida. Mas de qualquer forma, vlw.

P

Responde sim. Acho q sua duvida seria como serializar o objeto para envia-lo via web service. certo ?

M

Não. Pelos testes que fiz e pelo que vi, p/ enviar uma LISTA de objetos (que é o que eu preciso) não basta que estes objetos estejam serializados, sacou?

P

Pela experiencia que tenho com ksoap2 nao tive problemas em enviar objetos serializados vi WS. Se você poder enviar a mensagem de erro ajudaria.

A

Tenta com alguma implementaçao do JSON, como o Jackson ou GSON.

A ideia é simples: serializar um objeto, convertendo para String, para transportá-lo mais facilmente e do outro lado é só desserializá-lo, convertendo novamente no objeto original.

Exemplo com Jackson:
ObjectMapper mapper = new ObjectMapper();
Pessoa pessoa = new Pessoa();

// Serializando
String s = mapper.writeValueAsString(pessoa);

// Transporta a String para o WS

// Desserializando
Pessoa pessoa = mapper.readValue(s, Pessoa.class);
Já passei um array de objetos (Pessoa[]) e funcionou perfeitamente. Para implementar com uma List o processo é praticamente o mesmo.
M
adrielcafe:
Tenta com alguma implementaçao do JSON, como o Jackson ou GSON.

A ideia é simples: serializar um objeto, convertendo para String, para transportá-lo mais facilmente e do outro lado é só desserializá-lo, convertendo novamente no objeto original.

Exemplo com Jackson:
ObjectMapper mapper = new ObjectMapper();
Pessoa pessoa = new Pessoa();

// Serializando
String s = mapper.writeValueAsString(pessoa);

// Transporta a String para o WS

// Desserializando
Pessoa pessoa = mapper.readValue(s, Pessoa.class);
Já passei um array de objetos (Pessoa[]) e funcionou perfeitamente. Para implementar com uma List o processo é praticamente o mesmo.
Olá Adriel,

Usando uma implementação do JSON seria necessário alguma mudança no WebService?

A

maranata:

Usando uma implementação do JSON seria necessário alguma mudança no WebService?

Você apenas precisa adicionar o Jar (no cliente e no WS) da implementação JSON. Não precisa alterar nada no WS, você apenas vai tá passando uma String de uma lado para o outro, serializando e desserializando. É tudo muito transparente.

M

adrielcafe:
maranata:

Usando uma implementação do JSON seria necessário alguma mudança no WebService?

Você apenas precisa adicionar o Jar (no cliente e no WS) da implementação JSON. Não precisa alterar nada no WS, você apenas vai tá passando uma String de uma lado para o outro, serializando e desserializando. É tudo muito transparente.

O problema é que o Web Service é feito em .net :cry:

Teria alguma outra sugestão?

A

Transportar strings não seria o problema certo? O problema seria qual implementação JSON usar, já que estamos falando e Java e .Net. No site do JSON, lá embaixo, tem uma lista de implementações pra C#, Visual Basic e diversas outras linguagens.

No Android você usaria uma API e no WS outra API que possuem o mesmo padrão de serialização: JSON. Dessa forma dá certo :smiley:

A

Acabei de fazer um teste transportando uma List<Categoria>, uma lista com POJOs, usando o Jackson e funcionou perfeito :)

Fiz assim:
// Serializando
ObjectMapper mapper = new ObjectMapper();

Categoria c1 = new Categoria();
Categoria c2 = new Categoria();
Categoria c3 = new Categoria();

// Populando os POJOs

List&lt;Categoria&gt; lista = new ArrayList&lt;Categoria&gt;();
lista.add(c1);
lista.add(c2);
lista.add(c3);

String s = mapper.writeValueAsString(lista);


// Desserializando
List&lt;Categoria&gt; cats = mapper.readValue(s, new TypeReference&lt;List&gt;&lt;Categoria&gt;&gt;() { });

A chave para desserializar com sucesso a List<Categoria> foi usar [color=blue]new TypeReference< List<Categoria> >() {}[/color] .

Criado 4 de janeiro de 2012
Ultima resposta 4 de jan. de 2012
Respostas 11
Participantes 3