2. Recursos Envolvidos
2.3. Pacotes e classes
Neste projeto, três partes fundamentais do processo envolvem a comunicação com o web service REST da OpenWeatherMap e a execução de operações em segundo plano para manter a responsividade do aplicativo. Vamos abordar esses conceitos em detalhes.
Pacote org.json
Dentro do pacote org.json, você encontrará as seguintes classes que serão usadas para processar os dados JSON recebidos pelo aplicativo:
- JSONObject: Esta classe contém métodos para trabalhar com objetos JSON. Um dos construtores da classe pode converter uma String formatada em JSON em um objeto JSONObject. O JSONObject contém um mapeamento das propriedades para seus respectivos valores. As propriedades podem ter valores dos tipos int, long, double, boolean, String, JSONObject e JSONArray. Você pode acessar as propriedades usando os métodos get e set desta classe.
- JSONArray: Essa classe é usada para manipular arrays de objetos JSON. Ela fornece métodos para acessar os elementos dentro do array. No contexto deste projeto, a propriedade "list" na resposta da API OpenWeatherMap será tratada como um JSONArray, permitindo o acesso aos elementos dessa lista.
Essas classes são essenciais para analisar e manipular os dados JSON que serão obtidos do serviço da OpenWeatherMap.
Classe HttpUrlConnection e comunicação com um web service REST
Para ativar o web service, você precisará fazer uma solicitação HTTP à API da
OpenWeatherMap. Isso é feito em Java com a classe
HttpURLConnection, que está
presente no pacotejava.net
. Você começará com uma String representando a URL do serviço e, em seguida,
criará um objeto.
URL
para abrir uma nova conexãoHttpURLConnection
. Essa conexão será responsável por fazer a solicitação HTTP ao serviço da
OpenWeatherMap e receber a resposta, que normalmente será um objeto JSON. A
leitura dos dados de resposta será feita usando uma classe
InputStream
, que receberá o conteúdo linha por linha ou string por string do objeto JSON.
Depois de obter os dados, você converterá os dados lidos em um objeto
JSONObject para processamento
posterior.
AsyncTask
A comunicação com um serviço externo, como a leitura de arquivos, bancos de
dados ou web services, pode ser uma operação demorada e, se realizada na
thread principal do aplicativo, pode bloquear a interface do usuário e causar
o aparecimento da mensagem "Activity Not Responding (ANR)". Portanto, essas
operações devem ser executadas em segundo plano para manter a responsividade
do aplicativo.
No Android, uma maneira comum de realizar tarefas em segundo plano é usando a
classe
AsyncTask, que está no pacote android.os. O
AsyncTask executa operações de longa duração em uma thread
separada e , ao mesmo tempo, fornece a capacidade de transmitir os resultados
de volta para a thread principal, onde a interface do usuário está sendo
executada.
No contexto deste aplicativo, você usará duas subclasses de
AsyncTask:
- Uma para ativar o web service e fazer as solicitações HTTP para obter os dados da previsão do tempo.
- Outra para baixar uma imagem que representa a condição climática.
Isso ajudará a manter o aplicativo responsivo e evitar problemas de bloqueio durante a comunicação com o web service e o download de recursos, como imagens.