Baixe o app para aproveitar ainda mais
Prévia do material em texto
Avaliação Individual Avaliativa – Programação para Dispositivos Móveis Curso: Análise e Desenvolvimento de Sistemas Disciplina: Programação para Dispositivos Móveis Tutor: Claudio Fico Fonseca Aluno: Carlos Henrique da Silva Bernardo - 1210302193 Rio de Janeiro 2023 Introdução: A persistência de dados desempenha um papel fundamental no desenvolvimento de aplicativos modernos, permitindo armazenar e gerenciar informações de forma eficiente. Neste projeto, desenvolvi um aplicativo Android que utiliza o SQLite como mecanismo de armazenamento para gerenciar registros de pessoas. O objetivo deste trabalho é demonstrar como criar uma aplicação robusta, seguindo as melhores práticas de desenvolvimento Android. activity_main.xml <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- ListView para exibir a lista de pessoas --> <ListView android:id="@+id/peopleListView" android:layout_width="wrap_content" android:layout_height="456dp" android:layout_below="@id/exitButton" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.007" /> <!-- Botão para adicionar uma pessoa --> <Button android:id="@+id/addButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Adicionar Pessoa" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.111" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/peopleListView" app:layout_constraintVertical_bias="0.505" /> <!-- Botão para fechar o aplicativo --> <Button android:id="@+id/exitButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/addButton" android:layout_centerHorizontal="true" android:text="Fechar Aplicativo" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.936" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/peopleListView" app:layout_constraintVertical_bias="0.505" /> </androidx.constraintlayout.widget.ConstraintLayout> activity_dados_pessoa.xml <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".DadosPessoa"> <!-- EditText para inserir o nome completo --> <EditText android:id="@+id/nameEditText" android:layout_width="292dp" android:layout_height="47dp" android:inputType="text" android:hint="Nome Completo" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.243" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" app:layout_constraintVertical_bias="0.053" /> <!-- EditText para inserir a idade --> <EditText android:id="@+id/ageEditText" android:layout_width="114dp" android:layout_height="48dp" android:layout_marginBottom="36dp" android:hint="Idade" android:inputType="number" app:layout_constraintBottom_toTopOf="@+id/heightEditText" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.424" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" app:layout_constraintVertical_bias="1.0" /> <!-- EditText para inserir a altura --> <EditText android:id="@+id/heightEditText" android:layout_width="114dp" android:layout_height="47dp" android:layout_marginTop="116dp" android:hint="Altura" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.424" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/nameEditText" app:layout_constraintVertical_bias="0.0" /> <!-- EditText para inserir o peso --> <EditText android:id="@+id/weightEditText" android:layout_width="116dp" android:layout_height="45dp" android:layout_marginTop="32dp" android:hint="Peso" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.42" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/heightEditText" app:layout_constraintVertical_bias="0.032" /> <!-- EditText para inserir o email --> <EditText android:id="@+id/emailEditText" android:layout_width="292dp" android:layout_height="47dp" android:layout_marginTop="44dp" android:inputType="textEmailAddress" android:hint="Email" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.201" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/weightEditText" app:layout_constraintVertical_bias="0.0" /> <!-- Botão para editar os dados --> <Button android:id="@+id/editButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="40dp" android:layout_marginBottom="88dp" android:text="Editar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/backButton" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" /> <!-- Botão para excluir os dados --> <Button android:id="@+id/deleteButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="36dp" android:layout_marginBottom="88dp" android:text="Excluir" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- Botão para voltar --> <Button android:id="@+id/backButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="44dp" android:layout_marginBottom="88dp" android:text="Voltar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/deleteButton" /> <!-- Título para os dados pessoais --> <TextView android:id="@+id/textView2" android:layout_width="260dp" android:layout_height="54dp" android:layout_marginTop="48dp" android:text="Dados Pessoais" android:textSize="35sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.496"app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <!-- Rótulo para a idade --> <TextView android:id="@+id/textView3" android:layout_width="73dp" android:layout_height="37dp" android:layout_marginTop="220dp" android:text="Idade:" android:textSize="25sp" app:layout_constraintEnd_toStartOf="@+id/ageEditText" app:layout_constraintHorizontal_bias="0.452" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <!-- Rótulo para a altura --> <TextView android:id="@+id/textView4" android:layout_width="73dp" android:layout_height="37dp" android:layout_marginTop="304dp" android:text="Altura:" android:textSize="25sp" app:layout_constraintEnd_toStartOf="@+id/heightEditText" app:layout_constraintHorizontal_bias="0.452" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <!-- Rótulo para o peso --> <TextView android:id="@+id/textView5" android:layout_width="73dp" android:layout_height="37dp" android:layout_marginTop="392dp" android:text="Peso:" android:textSize="25sp" app:layout_constraintEnd_toStartOf="@+id/weightEditText" app:layout_constraintHorizontal_bias="0.47" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> Main_Activity.java package com.example.uvaava2; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { ListView peopleListView; Button addButton; Button exitButton; private ArrayList<String> peopleList; private ArrayAdapter<String> adapter; private PessoaDAO pessoaDAO; private ActivityResultLauncher<Intent> editPersonLauncher; // Novo adição private static final int REQUEST_ADD_PERSON = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Inicialização da instância do DAO pessoaDAO = new PessoaDAO(this); pessoaDAO.open(); // Referências para os elementos da interface peopleListView = findViewById(R.id.peopleListView); addButton = findViewById(R.id.addButton); exitButton = findViewById(R.id.exitButton); // Inicialização da lista de pessoas e do adaptador peopleList = new ArrayList<>(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, peopleList); peopleListView.setAdapter(adapter); // Atualiza a lista de pessoas updatePeopleList(); // Inicializa o ActivityResultLauncher para lidar com a edição de pessoa editPersonLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK) { // Atualiza a lista de pessoas após a edição ou adição updatePeopleList(); } } ); // Configura o botão "Adicionar Pessoa" addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Inicia a atividade "DadosPessoa" para adicionar uma nova pessoa Intent intent = new Intent(MainActivity.this, DadosPessoa.class); editPersonLauncher.launch(intent); } }); // Configura o botão "Fechar Aplicativo" exitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); // Configura o clique em um item da lista para editar os detalhes da pessoa peopleListView.setOnItemClickListener((parent, view, position, id) -> { // Inicia a atividade "DadosPessoa" com o ID da pessoa selecionada Intent intent = new Intent(MainActivity.this, DadosPessoa.class); intent.putExtra("pessoaId", id); editPersonLauncher.launch(intent); }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ADD_PERSON && resultCode == RESULT_OK) { // Atualize a lista de pessoas aqui updatePeopleList(); } } // Método para atualizar a lista de pessoas private void updatePeopleList() { List<Pessoa> pessoas = pessoaDAO.listarPessoas(); peopleList.clear(); for (Pessoa pessoa : pessoas) { peopleList.add(pessoa.getNome()); } adapter.notifyDataSetChanged(); } // Método onDestroy para fechar o banco de dados ao sair da atividade @Override protected void onDestroy() { super.onDestroy(); pessoaDAO.close(); } } DadosPessoas.java package com.example.uvaava2; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class DadosPessoa extends AppCompatActivity { // Declaração de elementos da interface EditText nameEditText, ageEditText, heightEditText, weightEditText, emailEditText; Button editButton, deleteButton, backButton; // Instância do DAO para acessar o banco de dados private PessoaDAO pessoaDAO; // ID da pessoa sendo editada (ou -1 se for uma nova pessoa) private long pessoaId; // Flag para indicar se está no modo de edição ou adição private boolean isEditMode = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dados_pessoa); // Inicialização da instância do DAO pessoaDAO = new PessoaDAO(this); pessoaDAO.open(); // Referências para os elementos da interface nameEditText = findViewById(R.id.nameEditText); ageEditText = findViewById(R.id.ageEditText); heightEditText = findViewById(R.id.heightEditText); weightEditText = findViewById(R.id.weightEditText); emailEditText = findViewById(R.id.emailEditText); editButton = findViewById(R.id.editButton); deleteButton = findViewById(R.id.deleteButton); backButton = findViewById(R.id.backButton); // Obtém o ID da pessoa da Intent pessoaId = getIntent().getLongExtra("pessoaId", -1); if (pessoaId != -1) { // Modo de edição isEditMode = true; // Se estiver no modo de edição, preenche os campos com os dados da pessoa existente Pessoa pessoa = pessoaDAO.getPessoaById(pessoaId); if (pessoa != null) { nameEditText.setText(pessoa.getNome()); ageEditText.setText(String.valueOf(pessoa.getIdade())); heightEditText.setText(String.valueOf(pessoa.getAltura())); weightEditText.setText(String.valueOf(pessoa.getPeso())); emailEditText.setText(pessoa.getEmail()); } editButton.setText("Editar"); } else { // Modode adição isEditMode = false; editButton.setText("Incluir"); } editButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isEditMode) { // Modo de edição - atualiza os dados da pessoa Pessoa pessoa = new Pessoa(); pessoa.setId(pessoaId); pessoa.setNome(nameEditText.getText().toString()); pessoa.setIdade(Integer.parseInt(ageEditText.getText().toString())); pessoa.setAltura(Double.parseDouble(heightEditText.getText().toString())); pessoa.setPeso(Double.parseDouble(weightEditText.getText().toString())); pessoa.setEmail(emailEditText.getText().toString()); int rowsUpdated = pessoaDAO.atualizarPessoa(pessoa); if (rowsUpdated > 0) { Toast.makeText(DadosPessoa.this, "Pessoa atualizada com sucesso!", Toast.LENGTH_SHORT).show(); finish(); } else { Toast.makeText(DadosPessoa.this, "Erro ao atualizar pessoa.", Toast.LENGTH_SHORT).show(); } } else { // Modo de adição - insere uma nova pessoa Pessoa pessoa = new Pessoa(); pessoa.setNome(nameEditText.getText().toString()); pessoa.setIdade(Integer.parseInt(ageEditText.getText().toString())); pessoa.setAltura(Double.parseDouble(heightEditText.getText().toString())); pessoa.setPeso(Double.parseDouble(weightEditText.getText().toString())); pessoa.setEmail(emailEditText.getText().toString()); long pessoaId = pessoaDAO.inserirPessoa(pessoa); if (pessoaId != -1) { Toast.makeText(DadosPessoa.this, "Pessoa adicionada com sucesso!", Toast.LENGTH_SHORT).show(); finish(); } else { Toast.makeText(DadosPessoa.this, "Erro ao adicionar pessoa.", Toast.LENGTH_SHORT).show(); } } } }); deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isEditMode && pessoaId != -1) { // Modo de edição - exclui a pessoa existente pessoaDAO.excluirPessoa(pessoaId); Toast.makeText(DadosPessoa.this, "Pessoa excluída com sucesso!", Toast.LENGTH_SHORT).show(); finish(); } } }); // Botão Voltar backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } // Método onDestroy para fechar o banco de dados ao sair da atividade @Override protected void onDestroy() { super.onDestroy(); pessoaDAO.close(); } } Pessoa.java package com.example.uvaava2; public class Pessoa { private long id; private String nome; private int idade; private double altura; private double peso; private String email; // Construtor padrão public Pessoa() { // Valores padrão para inicialização this.nome = "Carlos"; this.idade = 24; this.altura = 1.71; this.peso = 84; this.email = "carlospsp@hotmail.com"; } // Getters e Setters // Getter para o ID da pessoa public long getId() { return id; } // Setter para o ID da pessoa public void setId(long id) { this.id = id; } // Getter para o nome da pessoa public String getNome() { return nome; } // Setter para o nome da pessoa public void setNome(String nome) { if(!nome.isEmpty()) { this.nome = nome; } } // Getter para a idade da pessoa public int getIdade() { return idade; } // Setter para a idade da pessoa public void setIdade(int idade) { if(idade >= 0) { this.idade = idade; } } // Getter para a altura da pessoa public double getAltura() { return altura; } // Setter para a altura da pessoa public void setAltura(double altura) { if(altura >= 0) { this.altura = altura; } } // Getter para o peso da pessoa public double getPeso() { return peso; } // Setter para o peso da pessoa public void setPeso(double peso) { if(peso >= 0) { this.peso = peso; } } // Getter para o email da pessoa public String getEmail() { return email; } // Setter para o email da pessoa public void setEmail(String email) { if(!email.isEmpty()) { this.email = email; } } } PessoaDAO.java package com.example.uvaava2; import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; public class PessoaDAO { private SQLiteDatabase database; private PessoaDatabaseHelper dbHelper; // Construtor da classe que recebe o contexto da aplicação public PessoaDAO(Context context) { dbHelper = new PessoaDatabaseHelper(context); } // Método para abrir o banco de dados em modo de escrita public void open() throws SQLException { database = dbHelper.getWritableDatabase(); } // Método para fechar o banco de dados public void close() { dbHelper.close(); } // Método para inserir uma nova pessoa no banco de dados public long inserirPessoa(Pessoa pessoa) { ContentValues values = new ContentValues(); values.put(PessoaDatabaseHelper.COLUMN_NOME, pessoa.getNome()); values.put(PessoaDatabaseHelper.COLUMN_IDADE, pessoa.getIdade()); values.put(PessoaDatabaseHelper.COLUMN_ALTURA, pessoa.getAltura()); values.put(PessoaDatabaseHelper.COLUMN_PESO, pessoa.getPeso()); values.put(PessoaDatabaseHelper.COLUMN_EMAIL, pessoa.getEmail()); // Insere os valores no banco de dados e retorna o ID da nova pessoa return database.insert(PessoaDatabaseHelper.TABLE_PESSOA, null, values); } // Método para atualizar os dados de uma pessoa no banco de dados public int atualizarPessoa(Pessoa pessoa) { ContentValues values = new ContentValues(); values.put(PessoaDatabaseHelper.COLUMN_NOME, pessoa.getNome()); values.put(PessoaDatabaseHelper.COLUMN_IDADE, pessoa.getIdade()); values.put(PessoaDatabaseHelper.COLUMN_ALTURA, pessoa.getAltura()); values.put(PessoaDatabaseHelper.COLUMN_PESO, pessoa.getPeso()); values.put(PessoaDatabaseHelper.COLUMN_EMAIL, pessoa.getEmail()); // Atualiza os valores no banco de dados com base no ID da pessoa return database.update(PessoaDatabaseHelper.TABLE_PESSOA, values, PessoaDatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(pessoa.getId())}); } // Método para excluir uma pessoa do banco de dados com base no ID public void excluirPessoa(long pessoaId) { database.delete(PessoaDatabaseHelper.TABLE_PESSOA, PessoaDatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(pessoaId)}); } // Método para listar todas as pessoas no banco de dados public List<Pessoa> listarPessoas() { List<Pessoa> pessoas = new ArrayList<>(); Cursor cursor = database.query(PessoaDatabaseHelper.TABLE_PESSOA, null, null, null, null, null, null); cursor.moveToFirst();while (!cursor.isAfterLast()) { Pessoa pessoa = cursorToPessoa(cursor); pessoas.add(pessoa); cursor.moveToNext(); } cursor.close(); return pessoas; } // Método privado para converter um cursor em um objeto Pessoa @SuppressLint("Range") private Pessoa cursorToPessoa(Cursor cursor) { Pessoa pessoa = new Pessoa(); pessoa.setId(cursor.getLong(cursor.getColumnIndex(PessoaDatabaseHelper.COLUMN_ID))); pessoa.setNome(cursor.getString(cursor.getColumnIndex(PessoaDatabaseHelper.COLUMN_NOME))); pessoa.setIdade(cursor.getInt(cursor.getColumnIndex(PessoaDatabaseHelper.COLUMN_IDADE))); pessoa.setAltura(cursor.getDouble(cursor.getColumnIndex(PessoaDatabaseHelper.COLUMN_ALTURA))); pessoa.setPeso(cursor.getDouble(cursor.getColumnIndex(PessoaDatabaseHelper.COLUMN_PESO))); pessoa.setEmail(cursor.getString(cursor.getColumnIndex(PessoaDatabaseHelper.COLUMN_EMAIL))); return pessoa; } // Método para obter uma pessoa pelo seu ID public Pessoa getPessoaById(long pessoaId) { Cursor cursor = database.query(PessoaDatabaseHelper.TABLE_PESSOA, null, PessoaDatabaseHelper.COLUMN_ID + " = ?", new String[]{String.valueOf(pessoaId)}, null, null, null); if (cursor != null) { cursor.moveToFirst(); Pessoa pessoa = cursorToPessoa(cursor); cursor.close(); return pessoa; } return null; } } PessoaDatabaseHelper.java package com.example.uvaava2; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class PessoaDatabaseHelper extends SQLiteOpenHelper { // Nome e versão do banco de dados private static final String DATABASE_NAME = "pessoa.db"; private static final int DATABASE_VERSION = 1; // Nome da tabela e nomes das colunas public static final String TABLE_PESSOA = "pessoas"; public static final String COLUMN_ID = "_id"; public static final String COLUMN_NOME = "nome"; public static final String COLUMN_IDADE = "idade"; public static final String COLUMN_ALTURA = "altura"; public static final String COLUMN_PESO = "peso"; public static final String COLUMN_EMAIL = "email"; // Comando SQL para criar a tabela private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_PESSOA + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NOME + " TEXT, " + COLUMN_IDADE + " INTEGER, " + COLUMN_ALTURA + " REAL, " + COLUMN_PESO + " REAL, " + COLUMN_EMAIL + " TEXT);"; // Construtor da classe que recebe o contexto da aplicação public PessoaDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // Método chamado quando o banco de dados é criado pela primeira vez @Override public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); } // Método chamado quando o banco de dados é atualizado @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Remove a tabela existente se ela existir db.execSQL("DROP TABLE IF EXISTS " + TABLE_PESSOA); // Cria uma nova tabela onCreate(db); } } Imagens do Teste: Conclusão: Neste projeto, desenvolvi com sucesso um aplicativo Android que utiliza o SQLite para persistência de dados. Implementei uma classe Pessoa, criei uma interface de usuário para inclusão, exclusão e edição de registros e apliquei a arquitetura em três camadas para uma organização eficaz do código. Este projeto reforçou meu conhecimento em desenvolvimento Android e me preparou para futuros projetos envolvendo persistência de dados. Bibliografia: Listas e Adapters no Android. Disponível em: <https://www.devmedia.com.br/listas-e-adapters-no-android/33774>. Acesso em: 2 set. 2023. [Curso 2017 - Android Studio] Aula 12 - Criando a classe ClienteRepositorio - Parte 2. Disponível em: <https://www.youtube.com/watch?v=Wz6-YPgHl4I&ab_channel=PauloViniciusMoreiraDutra>. Acesso em: 2 set. 2023. THIENGO, V. SQLite no Android, Entendendo e Utilizando. Disponível em: <https://www.thiengo.com.br/sqlite-no-android-entendendo-e-utilizando>. Acesso em: 2 set. 2023.
Compartilhar