Aplicativo Android de lista de tarefas integrado a uma API REST independente, desenvolvido com Kotlin, XML Layouts, MVVM e Retrofit.
O TaskListApp-wAPI é um aplicativo Android nativo para gerenciamento de tarefas. Diferentemente de uma aplicação com persistência apenas no dispositivo, as operações são enviadas para uma API REST responsável por armazenar e disponibilizar os dados.
O projeto demonstra a integração entre duas aplicações independentes:
- Aplicativo Android: interface, validações, estados da tela e comunicação HTTP;
- Backend Node.js: regras das rotas, geração de identificadores e armazenamento das tarefas.
Os dois projetos ficam em repositórios separados e podem ser executados de forma independente.
Aplicativo Android
│
│ Retrofit + JSON
▼
QuickList API
│
▼
Tarefas armazenadas em memória
Confira o aplicativo em funcionamento, demonstrando o carregamento das tarefas, a criação de novos itens, a atualização do status, a exclusão e a sincronização manual com a API.
Screen_recording_20260123_1206092.mp4
- Listagem remota: carrega as tarefas cadastradas na API.
- Criação de tarefas: envia título e descrição para o backend.
- Atualização de status: permite marcar uma tarefa como concluída ou pendente.
- Exclusão de tarefas: remove o registro tanto da interface quanto da API.
- Sincronização manual: utiliza SwipeRefreshLayout para atualizar a lista.
- Feedback visual: apresenta mensagens de sucesso e falha com Toast.
- Validação de campos: impede o envio quando título e descrição não são informados.
- Indicador de conclusão: aplica checkbox e texto tachado às tarefas concluídas.
- Registro de requisições: utiliza OkHttp Logging Interceptor para apoiar a depuração.
O aplicativo utiliza o padrão MVVM — Model-View-ViewModel.
A classe Task representa a estrutura recebida e enviada para a API:
data classTask(
valid:String = "",
valtitle:String,
valdescription:String,
varcompleted:Boolean = false
)As propriedades utilizam @SerializedName para mapear os campos JSON.
O TaskViewModel concentra as operações assíncronas:
- buscar tarefas;
- criar tarefa;
- alternar o status;
- excluir tarefa;
- disponibilizar mensagens de retorno.
As chamadas são executadas com Kotlin Coroutines no viewModelScope. A interface observa a lista e as mensagens por meio de LiveData.
A interface utiliza:
- XML Layouts;
- RecyclerView;
- Adapter;
- AlertDialog;
- FloatingActionButton;
- SwipeRefreshLayout;
- Material Design Components.
A camada de rede contém:
RetrofitClient: configura Retrofit, Gson e OkHttp;TaskApiService: declara os endpoints;Task: representa o modelo compartilhado com a API.
| Tecnologia | Versão | Aplicação |
|---|---|---|
| Kotlin | — | Linguagem utilizada no aplicativo Android. |
| Android Gradle Plugin | 9.0.0 | Configuração e compilação do projeto. |
| XML Layouts | — | Construção da interface. |
| MVVM | — | Separação entre interface, estado e comunicação com a API. |
| LiveData e ViewModel | 2.10.0 | Gerenciamento e observação dos dados da tela. |
| Kotlin Coroutines | — | Execução assíncrona das requisições. |
| Retrofit | 3.0.0 | Comunicação com a API REST. |
| Gson Converter | 3.0.0 | Conversão entre JSON e objetos Kotlin. |
| OkHttp Logging Interceptor | 5.3.2 | Registro das requisições e respostas HTTP. |
| Material Components | 1.13.0 | Componentes visuais do aplicativo. |
| SwipeRefreshLayout | 1.2.0 | Atualização manual da lista. |
| RecyclerView | — | Renderização das tarefas. |
A API utilizada pelo aplicativo está disponível em:
O backend é um projeto separado, desenvolvido com Node.js e Express. Ele pode ser utilizado pela URL hospedada configurada no aplicativo ou executado localmente.
https://quicklistapp-api.onrender.com/
A URL está definida na constante BASE_URL do arquivo:
app/src/main/java/com/example/tasklistapp/data/api/RetrofitClient.kt
| Método | Endpoint | Operação |
|---|---|---|
GET | /tasks | Lista todas as tarefas. |
POST | /tasks | Cria uma tarefa. |
PUT | /tasks/{id} | Atualiza título, descrição ou status. |
DELETE | /tasks/{id} | Exclui uma tarefa. |
{
"title": "Estudar Retrofit",
"description": "Revisar integração entre Android e API"
}{
"id": "c493c06d-0000-0000-0000-000000000000",
"title": "Estudar Retrofit",
"description": "Revisar integração entre Android e API",
"completed": false
}app/src/main/java/com/example/tasklistapp/
├── data/
│ ├── api/
│ │ ├── RetrofitClient.kt
│ │ └── TaskApiService.kt
│ └── model/
│ └── Task.kt
├── ui/
│ └── TaskAdapter.kt
├── MainActivity.kt
└── viewmodel/
└── TaskViewModel.kt
Desafio: estruturar o projeto de forma que o aplicativo Android não fosse responsável pela persistência dos dados.
Solução: criação de uma API Node.js independente e comunicação por endpoints REST.
Aprendizado: a separação entre cliente e servidor permite substituir ou evoluir cada parte sem concentrar todas as responsabilidades em um único projeto.
Desafio: manter a interface alinhada com o estado atual da API após criar, atualizar ou excluir uma tarefa.
Solução: executar novamente fetchTasks() depois das operações e permitir atualização manual com SwipeRefreshLayout.
Aprendizado: em aplicações cliente-servidor, a interface precisa considerar que o servidor é a fonte dos dados apresentados.
Desafio: identificar requisições incorretas e respostas como 404.
Solução: configuração do OkHttp Logging Interceptor para acompanhar URL, método HTTP, corpo e resposta no Logcat.
Aprendizado: observar o tráfego HTTP facilita a identificação de problemas de rota, identificador e serialização.
Desafio: garantir correspondência entre os nomes das propriedades enviados pela API e o modelo Android.
Solução: utilização do Gson e de @SerializedName.
Aprendizado: o contrato entre frontend e backend deve permanecer consistente para evitar falhas na conversão dos dados.
Desafio: refletir visualmente uma mudança persistida no servidor.
Solução: envio do objeto atualizado pelo endpoint PUT, nova consulta da lista e alteração do checkbox e do estilo do título.
Aprendizado: o estado exibido na tela deve ser confirmado pela fonte remota, não apenas alterado localmente.
- Android Studio;
- Android SDK instalado;
- JDK compatível com o projeto;
- emulador ou dispositivo Android;
- conexão com a internet, quando utilizada a API hospedada.
O aplicativo possui suporte mínimo ao Android 7.0 — API 24.
git clone https://github.com/dierlisson/TaskListApp-wAPI.git
cd TaskListApp-wAPI- Abra a pasta no Android Studio.
- Aguarde a sincronização do Gradle.
- Inicie um emulador ou conecte um dispositivo Android.
- Execute o módulo
app.
Com a configuração atual, o aplicativo acessará a API hospedada no Render.
Primeiro, inicie o backend seguindo as instruções do repositório quicklistapp-api.
Depois, altere a constante BASE_URL em RetrofitClient.kt.
privateconstvalBASE_URL="http://10.0.2.2:3000/"O endereço 10.0.2.2 permite que o emulador acesse o localhost do computador.
Utilize o endereço IPv4 do computador na mesma rede local:
privateconstvalBASE_URL="http://192.168.0.10:3000/"Substitua 192.168.0.10 pelo endereço real do computador.
Como o servidor local utiliza HTTP, adicione temporariamente a propriedade abaixo ao elemento <application> do AndroidManifest.xml:
<applicationandroid:usesCleartextTraffic="true"
... >Essa configuração deve ser usada somente no ambiente local. Ao retornar para a API hospedada com HTTPS, remova a permissão de tráfego HTTP e restaure a URL:
privateconstvalBASE_URL="https://quicklistapp-api.onrender.com/"Desenvolvido por Dierlisson Justiniano como projeto de portfólio em desenvolvimento Android.
- LinkedIn:linkedin.com/in/dierlissonjustiniano
- GitHub:github.com/dierlisson