Este aplicativo Android nativo, TaskListApp, foi desenvolvido como solução para o desafio de criar um App de Lista de Tarefas com integração com API da comunidade NovaEraTech.
O objetivo do projeto foi dar um passo além da persistência local, criando um aplicativo que consome uma API REST real, aplicando a arquitetura MVVM para organização de código e seguindo as diretrizes de Material Design.
O aplicativo atende a todos os requisitos propostos no desafio:
- Conexão com API: As tarefas são recuperadas, criadas e gerenciadas em um servidor remoto (Node.js), e não apenas no dispositivo.
- Gerenciamento Completo (CRUD): Permite adicionar (com validação), listar, marcar como concluída e excluir tarefas diretamente na API.
- Arquitetura Profissional: Uso do padrão MVVM (Model-View-ViewModel) para separar a lógica de negócios da interface do usuário.
- Interface Moderna: Design visual seguindo os padrões do Material Design, garantindo uma experiência de uso fluida.
- Listar Tarefas: Visualização de tarefas recuperadas de uma API remota.
- Adicionar Tarefa: Criação de novas tarefas com título e descrição.
- Marcar como Concluída: Atualização de status com feedback visual (risco no texto e checkbox).
- Excluir Tarefa: Remoção de itens da lista e do servidor.
- Sincronização Manual: Funcionalidade "Swipe to Refresh" (puxar para atualizar) para garantir dados recentes.
- Validação de Interface: Feedback imediato ao usuário (Toasts) para campos obrigatórios e erros de conexão.
O projeto foi construído com foco em separação de responsabilidades e código limpo, utilizando:
- Linguagem: Kotlin
- Arquitetura: MVVM (Model-View-ViewModel)
- Design: XML Layouts & Material Design Components
- Networking: Retrofit 2, OkHttp Logging Interceptor & GSON
- Assincronismo: Kotlin Coroutines
O código está organizado em pacotes:
data/: Contém os modelos (Task) e a camada de rede (API Service e Retrofit Client).viewmodel/: Gerencia o estado da UI e a lógica de negócios, isolando a View da fonte de dados.ui/: Contém as Activities e Adapters (focados apenas em renderizar a tela).
Para suportar este aplicativo, foi desenvolvida uma API RESTful em Node.js hospedada no Render.
- URL Base:
https://quicklistapp-api.onrender.com - Repositório da API: https://github.com/dierlisson/quicklistapp-api.git
GET /tasks: Lista todas as tarefas.POST /tasks: Cria uma nova tarefa.PUT /tasks/{id}: Atualiza uma tarefa (toggle completed).DELETE /tasks/{id}: Remove uma tarefa.
Durante o desenvolvimento, enfrentei desafios reais de integração cliente-servidor que fortaleceram meu entendimento sobre o ciclo de vida de requisições HTTP:
1. Persistência Volátil e Sincronização
- Problema: Como a API está hospedada em um plano gratuito, os dados na memória do servidor eram resetados após inatividade, causando inconsistência entre os IDs listados no App e os existentes no Backend (Erro 404).
- Solução: Implementação do SwipeRefreshLayout, permitindo que o usuário force uma atualização da lista para garantir que os dados locais estejam sempre sincronizados com o servidor antes de realizar ações de edição ou exclusão.
2. Debugging de Requisições HTTP
- Problema: Dificuldade inicial em identificar por que a remoção de tarefas falhava silenciosamente ou retornava erros genéricos.
- Solução: Configuração do OkHttp Logging Interceptor. Isso permitiu visualizar no Logcat exatamente qual URL e Verbo HTTP (DELETE) estavam sendo enviados, facilitando a identificação de que a rota não havia sido implantada corretamente no servidor.
3. Mapeamento de JSON
- Solução: Uso da anotação
@SerializedNamedo GSON para garantir robustez, assegurando que o campoidfosse mapeado corretamente independentemente de variações de nomenclatura no código Kotlin.
Confira o aplicativo em funcionamento, demonstrando a sincronização com a API, adição e remoção de tarefas e a funcionalidade "Pull to Refresh".
Screen_recording_20260123_1206092.mp4
1. Clone este repositório:
git clone [https://github.com/seu-usuario/tasklistapp.git](https://github.com/seu-usuario/tasklistapp.git)2. Abra o projeto no Android Studio.
Inicie o Android Studio e selecione "Open an Existing Project", navegando até a pasta clonada.
3. Aguarde o sincronismo do Gradle.
Aguarde o Android Studio baixar as dependências necessárias
4. Execute o app em um emulador ou dispositivo físico (Android 7.0+).
Nota: O dispositivo precisa de acesso à internet para carregar as tarefas.
Desenvolvido por **Dierlisson Justiniano** como parte de um desafio prático de desenvolvimento Android.