Android

23 jan, 2015

Usando HttpClient e Gson no Android Studio

Publicidade

Para integrar seu app Android com dados oriundos de uma fonte externa, como por exemplo um webservice, o formato Json tem sido uma excelente via nesse tipo de transação. O Google tem uma biblioteca que visa facilitar a manipulação de elementos Json no Java, o nome dela é Gson.

Pois bem, vamos ao nosso exemplo prático de manipulação desta biblioteca. Vou utilizar a  IDE oficial para desenvolvimento de aplicações móveis da Google, o Android Studio.

Antes de codificarmos, é necessário incluirmos a biblioteca em nosso projeto. No Eclipse é necessário realizar o download da mesma e inserirmos no Build Path do nosso projeto. Já no Android Studio, IDE que estamos utilizando em nosso artigo, basta irmos nas dependências do nosso Projeto e incluirmos o Gson aguardar a execução de todas as tasks do Android Studio e pronto.

artigo1

Agora vamos ao nosso “mini-projeto”. Criaremos um método para melhor demonstrar o que vamos utilizar. Será um método “void” e receberá como parâmetro uma String que é a nossa URI. Em outra oportunidade poderemos melhorar nossa estrutura dentro do projeto Android – são cenas para os próximos capítulos. Segue o nosso código:

private void getJson(final String url) {
        // Toda chamada externa necessita rodar em background, então utilizamos thread
        new Thread(new Runnable() {
            @Override
            public void run() {
	    // Criamos nosso objeto de retorno que poderia ser uma entidade (Exemplo: Aluno, Usuário, etc.), nesse caso utilizamos algo genérico.	
                Object retorno = null;
                // Há a necessidade de tratarmos excessão tendo em vista que estamos realizando requisições em nossa aplicação
                try {
                // Setamos o cliente http e o nosso request, que será do tipo GET (O POST veremos em outros artigos)
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpGet request = new HttpGet();
	        // Setamos nossa URI
                    request.setURI(new URI(url));
        // Executamos nossa transação HTTP
                    HttpResponse response = httpclient.execute(request);
	        // Pegamos o conteúdo advindo como resposta e inserimos em um InputStream
                    InputStream content = response.getEntity().getContent();
  	         // Instanciamos o nosso Reader com o InputStream 
                    Reader reader = new InputStreamReader(content);
		
	        // Aqui vamos utilizar a Biblioteca Gson para transformar o Json recebido em Objeto JAVA
/* Instanciamos o objeto Gson e em seguida utilizamos o método fromJson() passando como parâmetro o Reader instanciado e o tipo do Objeto que será retornado. */
                    Gson gson = new Gson();
                    retorno = gson.fromJson(reader, HashMap.class);

                    content.close();


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

                }
            }
        }).start();
    }

Veja como chamamos o método no onCreate de nossa Activity:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Chamando nosso método.
        String url = "http://jsonip.com/";
        getJson(url);

    }

Printei o resultado ao rodar em modo debug:

artigo02

Observações finais:

  1. Utilizamos as configurações padrão da biblioteca, mas caso quiséssemos modificá-las, construiríamos uma instância Gson pelo construtor GsonBuilder;
  2. Dependendo do retorno de nosso Json, poderíamos modificar o tipo de Objeto em que o Json irá se transformar. No nosso caso utilizamos o HashMap, porém em uma lista com objetos iguais poderíamos usar ArrayList;
  3. Como pincelado anteriormente, em um projeto mais robusto seria mais coerente nosso método getJson estar na camada de persistência;
  4. A criação de uma entidade com os mesmos atributos do Json seria pertinente para transformar diretamente, pelo Gson, nesta entidade criada.

Tudo isso podemos abordar em artigos posteriores.

Uma boa fonte de referência e aprofundamento é o próprio site da biblioteca: https://sites.google.com/site/gson/gson-user-guide.

Bom, este foi meu primeiro artigo no iMasters e é com grande satisfação que demonstro aqui minha alegria por isso. Espero ter ajudado.

Até a próxima!