Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 TaskListApp-wAPI

Aplicativo Android de lista de tarefas integrado a uma API REST independente, desenvolvido com Kotlin, XML Layouts, MVVM e Retrofit.

Kotlin Android Retrofit Node.js API

📱 Sobre o projeto

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

🎥 Demonstração

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

✨ Funcionalidades

  • 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.

🏗️ Arquitetura

O aplicativo utiliza o padrão MVVM — Model-View-ViewModel.

Model

A classe Task representa a estrutura recebida e enviada para a API:

data class Task(
    val id: String = "",
    val title: String,
    val description: String,
    var completed: Boolean = false
)

As propriedades utilizam @SerializedName para mapear os campos JSON.

ViewModel

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.

View

A interface utiliza:

  • XML Layouts;
  • RecyclerView;
  • Adapter;
  • AlertDialog;
  • FloatingActionButton;
  • SwipeRefreshLayout;
  • Material Design Components.

Data e rede

A camada de rede contém:

  • RetrofitClient: configura Retrofit, Gson e OkHttp;
  • TaskApiService: declara os endpoints;
  • Task: representa o modelo compartilhado com a API.

🛠️ Tecnologias utilizadas

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.

🔗 Backend

A API utilizada pelo aplicativo está disponível em:

quicklistapp-api

O backend é um projeto separado, desenvolvido com Node.js e Express. Ele pode ser utilizado pela URL hospedada configurada no aplicativo ou executado localmente.

URL configurada no aplicativo

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

🌐 Endpoints utilizados

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.

Exemplo de criação

{
  "title": "Estudar Retrofit",
  "description": "Revisar integração entre Android e API"
}

Exemplo de resposta

{
  "id": "c493c06d-0000-0000-0000-000000000000",
  "title": "Estudar Retrofit",
  "description": "Revisar integração entre Android e API",
  "completed": false
}

📂 Estrutura do projeto

app/src/main/java/com/example/tasklistapp/
├── data/
│   ├── api/
│   │   ├── RetrofitClient.kt
│   │   └── TaskApiService.kt
│   └── model/
│       └── Task.kt
├── ui/
│   └── TaskAdapter.kt
├── MainActivity.kt
└── viewmodel/
    └── TaskViewModel.kt

🚧 Desafios técnicos e aprendizados

1. Separação entre aplicativo e backend

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.

2. Sincronização com dados remotos

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.

3. Diagnóstico de erros HTTP

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.

4. Mapeamento entre JSON e Kotlin

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.

5. Estados concluído e pendente

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.

🚀 Como executar o aplicativo

Pré-requisitos

  • 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.

1. Clonar o repositório

git clone https://github.com/dierlisson/TaskListApp-wAPI.git
cd TaskListApp-wAPI

2. Abrir e executar

  1. Abra a pasta no Android Studio.
  2. Aguarde a sincronização do Gradle.
  3. Inicie um emulador ou conecte um dispositivo Android.
  4. Execute o módulo app.

Com a configuração atual, o aplicativo acessará a API hospedada no Render.

🧩 Como executar o aplicativo com a API local

Primeiro, inicie o backend seguindo as instruções do repositório quicklistapp-api.

Depois, altere a constante BASE_URL em RetrofitClient.kt.

Emulador do Android Studio

private const val BASE_URL = "http://10.0.2.2:3000/"

O endereço 10.0.2.2 permite que o emulador acesse o localhost do computador.

Dispositivo físico

Utilize o endereço IPv4 do computador na mesma rede local:

private const val BASE_URL = "http://192.168.0.10:3000/"

Substitua 192.168.0.10 pelo endereço real do computador.

Permitir HTTP durante o desenvolvimento local

Como o servidor local utiliza HTTP, adicione temporariamente a propriedade abaixo ao elemento <application> do AndroidManifest.xml:

<application
    android: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:

private const val BASE_URL = "https://quicklistapp-api.onrender.com/"

👤 Autor e contato profissional

Desenvolvido por Dierlisson Justiniano como projeto de portfólio em desenvolvimento Android.

About

Aplicativo Android de tarefas integrado a uma API REST em Node.js, com Kotlin, MVVM, Retrofit e CRUD.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages