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:

  1. Uma para ativar o web service e fazer as solicitações HTTP para obter os dados da previsão do tempo.
  2. 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.