Este post inicia uma série sobre REST services no Android, com a utilização do framework Spring Android, que é uma extensão do framework Spring, para Android. Esta série tem como objetivo apresentar alguns exemplos de utilização das funcionalidades do client REST e do Auth Module.
As implementações à seguir demonstram a utilização de um webservice de CEP que fornece um XML de retorno com o endereço correspondente ao CEP fornecido.
O XML à seguir descreve a tela que o usuário realizará as interações.
[cc lang=”xml” width=”100%”]
[/cc]
O método a seguir cria um listener para o botão, aguardando a interação do usuário. Quando o usuário clica no botão, o método onClick é disparado e é neste método que realizamos a nossa chamada ao serviço REST.
Primeiro, criamos o restTemplate, que executará a chamada ao serviço. Em seguida, adicionamos um SimpleXmlHttpMessageConverter ao restTemplate, para que ele possa traduzir o XML recebido em um objeto, no método ‘getForObject’.
Neste método, é executada uma chamada GET para a url definida anteriormente. Passamos como parâmetro a própria URL, a entidade que deverá ser serializada e os parâmetros que a URL necessita. Neste caso, apenas o CEP.
Finalmente, a entidade retornada é utilizada para preencher a tela e prover feedback ao usuário.
[cc lang=”java” width=”100%”]
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, “onCreate”);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.getcep);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
RestTemplate restTemplate = new RestTemplate();
List
messageConverters.add(new SimpleXmlHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
final String urlCEP = “http://cep.republicavirtual.com.br/web_cep.php?cep={cep}&formato=xml”;
EditText cep = (EditText) findViewById(R.id.cep);
Cep result = restTemplate.getForObject(urlCEP, Cep.class, cep.getText());
EditText endereco = (EditText) findViewById(R.id.endereco);
EditText bairro = (EditText) findViewById(R.id.bairro);
EditText cidade = (EditText) findViewById(R.id.cidade);
EditText uf = (EditText) findViewById(R.id.uf);
endereco.setText(result.getTipo_logradouro() + ” ” + result.getLogradouro());
bairro.setText(result.getBairro());
cidade.setText(result.getCidade());
uf.setText(result.getUf());
}
});
}
[/cc]
A Entidade CEP possui os parâmetros retornados pelo serviço e possui as anotações @Element e @Root(strict = false) para definir os campos a serem serializados e que nem todos são necessários no retorno do serviço, respectivamente.
[cc lang=”java” width=”100%”]
@Root(strict = false)
public class Cep {
/** The resultado. */
@Element
private long resultado;
/** The resultado_txt. */
@Element
private String resultado_txt;
/** The uf. */
@Element
private String uf;
/** The cidade. */
@Element
private String cidade;
/** The bairro. */
@Element
private String bairro;
/** The tipo_logradouro. */
@Element
private String tipo_logradouro;
/** The logradouro. */
@Element
private String logradouro;
…
}
[/cc]
Para finalizar, não se esqueça de adicionar a tag de permissão para INTERNET no seu AndroidManifest.xml
[cc lang=”xml” width=”100%”]
[/cc]
E definir as dependencias do projeto no pom.xml:
[cc lang=”xml” width=”100%”]
…
…
[/cc]
Este foi mais um post da série Android, espero que tenham gostado. Quaisquer dúvidas, sugestões e/ou reclamações, comentem!
_________________________________________
Lucas Oliveira – Analista Programador na redspark.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_
Muito bom! o/
Olá amigo, gostei muito do conteúdo, só que ainda sou leigo no desenvolvimento android e não consegui fazer o projeto. Será que vc pode me enviar o codigo fonte completo: Android – Desenvolvimento REST com Spring
Desde já agradeço a colaboração
Att,
Antonio
Muito informativo o artigo, você poderia disponibilizar o código do projeto?
Ótimo conteúdo…