Conexões HTTP

Com esse Servlet implementado e rodando dentro de um servidor na máquina local, podemos partir para o lado Android da comunicação. Nesse exemplo, estaremos apenas enviando uma requisição a esse Servlet e então exibindo a mensagem recebida ao usuário, utilizando um Toast. Vejamos a Listagem 7, que contém o código responsável por executar essa requisição.

Listagem 7 - Código do cliente para excutar uma requisição GET ao ServletHello.

Na Activity apresentada na Listagem 7, implementamos apenas o método onCreate() para inicializar a Activity e fazer a requisição, através do método connect(id), que passa um ID para o servidor que é retornado junto a resposta. Esse parâmetro, em situações reais, é muito importante, pois pode ser através desse ID que a consulta ao banco será feita, ou alguma consulta de outro tipo que necessite de um parâmetro por parte de quem fez a requisição.

O método connect() é o método responsável por fazer a conexão. Como podemos ver, ele utiliza a API HttpUrlConnection para tal. O primeiro passo para fazer a requisição bem sucedida é criar um objeto do tipo URL que conterá o endereço da requisição a ser feita, juntamente do parâmetro da requisição, se for necessário, como mostrado no método connect(id). Uma vez criado o URL, precisamos abrir uma conexão HTTP com o servidor com o qual faremos a comunicação. Para isso, criamos um objeto do tipo HttpUrlConnection e então requisitamos ao objeto URL que abra a conexão com o endereço que foi configurado. Ao abrir essa conexão, o URL retornará um objeto que pode ser transformado em um HttpUrlConnection, através de um cast.

Uma vez que tenhamos o objeto HttpUrlConnection com a conexão aberta, devemos configurar o método de requisição a ser utilizado, através do método setRequestMethod(), e então conectar ao servidor. Para isso, utilizamos o método connect() do objeto HttpUrlConnection.

Após a conexão ser realizada, se esta tiver sucesso, poderemos receber dados através de um objeto BufferedReader. Utilizando o método getInputStream() do HttpUrlConnection, podemos ler uma sequência de dados que será enviada pelo servidor. Essa sequência, quando passada por um InputStreamReader torna-se compreensível e pode ser armazenada em buffer através de um objeto BufferedReader. Perceba que é importante passar por esses dois passos para que tenhamos acesso correto aos dados que estejam sendo enviados pelo servidor.

Uma vez que tenhamos acesso a um objeto do tipo BufferedReader, podemos utilizar o método getLine() para pegar uma linha de conteúdo do que tenha sido enviado, no tipo string. Uma vez que tenhamos esse objeto do tipo string, podemos trabalhar com o que o servidor nos tenha retornado. No caso da Activity apresentada, esse valor é utilizado em um Toast para ser exibido ao usuário.

Perceba que durante o processo de conexão alguns erros podem ocorrer. Esses erros, exceções do tipo IOException ou MalformedURLException, precisam ser tratados utilizando try/catch ou então lançados para cima. Caso sejam lançados, é necessário ter certeza que alguém acima de sua Activity será capaz de tratar esses erros, ou eles poderão gerar o encerramento inesperado de sua aplicação.

Também é importante notar que fazer conexões HTTP leva tempo. Caso conexões sejam feitas como no exemplo exibido, dentro da thread principal, é muito provável que haja uma grande pausa na aplicação, o que pode gerar desconforto para o usuário e, principalmente, uma Activity Not Responding (ANR) que pode levar ao encerramento da aplicação. Para evitar esse tipo de perda de desempenho, o Android disponibiliza ao usuário uma interface para realizar requisições assíncronas. Vejamos agora como essa interface funciona.

Versão 5.3 - Todos os Direitos reservados