Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

UNIVERSIDADE VEIGA DE ALMEIDA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Rio de Janeiro - RJ 
2024 
 
 
 
 
 
 
DANIEL ESCOVINO COELHO 
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS 
AVA 2 - Desenvolvimento de um aplicativo com a persistência de dados com o uso 
do SQLite no Android 
 
 
ENUNCIADO: 
 
Desenvolvimento de um aplicativo com a persistência de dados com o uso do 
SQLite no Android 
 
A persistência é um recurso muito importante no desenvolvimento de aplicativos. 
Saber trabalhar com os diversos tipos de armazenamento permite que você 
desenvolva projetos mais robustos. O desenvolvimento de projetos com uso de 
banco de dados, seja local ou remoto, é um pré-requisito para o desenvolvimento de 
aplicativos modernos. 
Para a concretização dos conhecimentos obtidos nesta unidade, você deve definir 
um objeto para a criação de sua classe e desenvolver um projeto com uso de 
persistência de dados com uso do SQLite no Android para realizar a manutenção 
dos diferentes registros de armazenamento, com a listagem, inclusão, alteração e 
exclusão desses registros. 
Crie um aplicativo Android para trabalhar com uma base de dados com uma tabela 
para persistência de dados de um objeto escolhido por você. 
O objeto deve ser definido por meio de uma classe própria, com: 
• O mínimo de cinco atributos (com uso de três diferentes tipos de dados) mais 
o atributo id (long). 
• Pelo menos um método construtor. 
• Métodos de acesso (setters & getters) para todos os atributos. 
• Outros métodos que sejam necessários. 
A aplicação deverá tratar a inclusão, alteração e exclusão dos registros, além de 
tratar o acesso, abertura e fechamento do recurso do banco de dados do SQLite, 
com o uso da arquitetura em três camadas. 
O aplicativo deverá apresentar os dados dos objetos armazenados por meio de uma 
lista (ListView) e apresentar as funcionalidades de inclusão, exclusão e alteração, 
que podem ser realizadas de acordo com a sua escolha. 
Você pode montar as telas a seu critério, desde que atenda aos requisitos de 
listagem, inclusão, exclusão e alteração dos registros. 
 
Procedimentos para elaboração do TD 
Crie um projeto no Android Studio e desenvolva a aplicação. Prepare um documento 
do Word com uma capa (apresentado a instituição, o curso, a disciplina, o aluno e o 
professor); a introdução do trabalho; o conteúdo com a documentação do sistema, 
contendo a captura das telas e os códigos de desenvolvimento das telas (código 
XML da view); os códigos de programação de todas as classes com comentários e 
apresentação dos testes realizados com o aplicativo com as capturas das telas dos 
testes; a conclusão e a bibliografia do trabalho. 
Realize o envio da tarefa incluindo o arquivo do Word. 
 
 
 
 
 
 
 
 
 
 
 
Desenvolvimento: 
 
Código XML da View: 
 
• activity_cadastro_servico.xml 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/textIdade" /> 
 
 
 
 
 
• activity_listar_servico.xml 
 
 
 
 
 
 
 
 
 
• item.xml 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Código Java: 
 
 
• Animal.java 
 
package com.example.AVA2CadastroBanhoeTosa; 
 
import java.io.Serializable; 
 
// Classe modelo da entidade com seus respectivos métodos getters e setters 
 
public class Animal implements Serializable { 
 private Long id; 
 private String servico, raca, nome, pelo; 
 private Short idade; 
 
 public Long getId() { 
 return id; 
 } 
 public void setId(Long id) { 
 this.id = id; 
 } 
 public String getServico() { 
 return servico; 
 } 
 public void setServico(String servico) { 
 this.servico = servico; 
 } 
 public String getRaca() { 
 return raca; 
 } 
 public void setRaca(String raca) { 
 this.raca = raca; 
 } 
 public String getNome() { 
 return nome; 
 } 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 public String getPelo() { 
 return pelo; 
 } 
 public void setPelo(String pelo) { 
 this.pelo = pelo; 
 } 
 public Short getIdade() { 
 return idade; 
 } 
 public void setIdade(Short idade) { 
 
 
 this.idade = idade; 
 } 
} 
 
• ServicoAdapter.java 
 
package com.example.AVA2CadastroBanhoeTosa; 
 
import android.app.Activity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 
 
import java.util.List; 
 
// Adaptador para exibir os dados da listagem de forma customizada para esta 
aplicação, com nome, serviço, idade, raça e pelo de cada animal cadastrado. 
public class ServicoAdapter extends BaseAdapter { 
 
 private List animais; 
 private Activity activity; 
 
 public ServicoAdapter(Activity activity, List animais) { 
 this.activity = activity; 
 this.animais =animais; 
 } 
 
 @Override 
 public int getCount() { 
 return animais.size(); 
 } 
 
 @Override 
 public Object getItem(int i) { 
 return animais.get(i); 
 } 
 
 @Override 
 public long getItemId(int i) { 
 return animais.get(i).getId(); 
 } 
 
 @Override 
 public View getView(int i, View view, ViewGroup viewGroup) { 
 
 View v = activity.getLayoutInflater().inflate(R.layout.item, viewGroup, 
false); 
 TextView servico = v.findViewById(R.id.txtServico); 
 
 
 
 
 TextView raca = v.findViewById(R.id.txtRaca); 
 TextView nome = v.findViewById(R.id.txtNome); 
 TextView pelo = v.findViewById(R.id.txtPelo); 
 TextView idade = v.findViewById(R.id.txtIdade); 
 Animal animal = animais.get(i); 
 
 servico.setText(animal.getServico()); 
 raca.setText(animal.getRaca()); 
 nome.setText(animal.getNome()); 
 pelo.setText(animal.getPelo()); 
 idade.setText(animal.getIdade().toString()); 
 
 return v; 
 } 
} 
 
• ServicoDAO.java 
 
package com.example.AVA2CadastroBanhoeTosa 
 
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; 
 
// Arquivo com os métodos de inse rção (inserir()), leitura, atualização 
(atualizar()) e deletar (excluir()) dos dados no banco de dados. 
 
public class ServicoDAO { 
 
 private Conexao conexao; 
 private SQLiteDatabase banco; 
 
 public ServicoDAO(Context context) { 
 conexao = new Conexao(context); 
 } 
 
 public void open() throws SQLException { 
 banco = conexao.getWritableDatabase(); 
 } 
 
 public void close() { 
 conexao.close(); 
 } 
 
 
 
 public long inserir(Animal animal) { 
ContentValues values = new ContentValues(); 
 values.put("servico", animal.getServico()); 
 values.put("raca", animal.getRaca()); 
 values.put("nome", animal.getNome()); 
 values.put("pelo", animal.getPelo()); 
 values.put("idade", animal.getIdade()); 
 return banco.insert("animal", null, values); 
 } 
 
 public List obterTodos() { 
 List animais = new ArrayList(); 
 Cursor cursor = banco.query("animal", new String[]{"id", " servico", "raca", 
"nome", "pelo", "idade"}, 
 null, null, null, null, null); 
 while(cursor.moveToNext()) { 
 Animal animal = new Animal(); 
 animal.setId(cursor.getLong(0)); 
 animal.setServico(cursor.getString(1)); 
 animal.setRaca(cursor.getString(2)); 
 animal.setNome(cursor.getString(3)); 
 animal.setPelo(cursor.getString(4)); 
 animal.setIdade(cursor.getShort(5)); 
 animais.add(animal); 
 } 
 cursor.close(); 
 return animais; 
 } 
 
 public void excluir(Animal animal) { 
 banco.delete("animal", "id = ?", new String[]{animal.getId().toString()}); 
 } 
 
 public void atualizar(Animal animal) { 
 ContentValues values = new ContentValues(); 
 values.put("servico", animal.getServico()); 
 values.put("raca", animal.getRaca()); 
 values.put("nome", animal.getNome()); 
 values.put("pelo", animal.getPelo()); 
 values.put("idade", animal.getIdade()); 
 banco.update("animal", values, 
 "id = ?", new String[]{animal.getId().toString()}); 
 } 
} 
 
• CadastroServicoActivity.java 
 
package com.example.AVA2CadastroBanhoeTosa 
 
import androidx.appcompat.app.AppCompatActivity; 
 
 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 
 
// Atividade para retornar ao clicar em atualizar os dados de um animal ou ao 
clicar no ícone de adicionar "+" 
// no menu superior, para cadastrar um novo tipo de serviço. 
 
public class CadastroServicoActivity extends AppCompatActivity { 
 
 private EditText servico, raca, nome, pelo, idade; 
 private ServicoDAO dao; 
 private Animal animal = null; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_cadastro_servico); 
 
 servico = findViewById(R.id.editServico); 
 raca = findViewById(R.id.editRaca); 
 nome = findViewById(R.id.editNome); 
 pelo = findViewById(R.id.editPelo); 
 idade = findViewById(R.id.editIdade); 
 dao = new ServicoDAO(this); 
 
 Intent it = getIntent(); 
 if(it.hasExtra("animal")) { 
 animal = (Animal) it.getSerializableExtra("animal"); 
 servico.setText(animal.getServico()); 
 raca.setText(animal.getRaca()); 
 nome.setText(animal.getNome()); 
 pelo.setText(animal.getPelo()); 
 idade.setText(animal.getIdade().toString()); 
 } 
 } 
 
 // Método que é chamado ao clicar no botão "Salvar" na tela após o 
preenchimento dos dados do novo tipo de serviço ou na atualização de dados 
 // de um serviço já existente. Este método verifica qual desses casos é o 
 // atual e faz a ação de inserir ou atualizar no banco. 
 
 public void salvar(View view) { 
 
 if(animal == null) { 
 animal = new Animal(); 
 animal.setServico(servico.getText().toString()); 
 
 
 
animal.setRaca(raca.getText().toString()); 
 animal.setNome(nome.getText().toString()); 
 animal.setPelo(pelo.getText().toString()); 
 animal.setIdade(Short.parseShort(idade.getText().toString())); 
 dao.open(); 
 long id = dao.inserir(animal); 
 dao.close(); 
 Toast.makeText(this, "Serviço inserido com o id: " + id, 
Toast.LENGTH_SHORT).show(); 
 } else { 
 animal.setServico(servico.getText().toString()); 
 animal.setRaca(raca.getText().toString()); 
 animal.setNome(nome.getText().toString()); 
 animal.setPelo(pelo.getText().toString()); 
 animal.setIdade(Short.parseShort(idade.getText().toString())); 
 dao.open(); 
 dao.atualizar(animal); 
 dao.close(); 
 Toast.makeText(this, "Cadastro do serviço atualizado", 
Toast.LENGTH_SHORT).show(); 
 } 
 } 
} 
 
 
• ListarServicoActivity.java 
 
package com.example.AVA2CadastroBanhoeTosa 
 
import androidx.appcompat.app.AppCompatActivity; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.ContextMenu; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.SearchView; 
 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 
 
 
 
 
// Atividade Principal, que é exibida ao abrir o app. 
// Mostra a listagem com os serviços que foram cadastrados e suas 
informações 
 
public class ListarServicoActivity extends AppCompatActivity { 
 
 private ListView listView; 
 private ServicoDAO dao; 
 private List animais; 
 private List animaisFiltrados = new ArrayList(); 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_listar_servico); 
 
 listView = findViewById((R.id.lista_animais));dao = new ServicoDAO(this); 
 dao.open(); 
 animais = dao.obterTodos(); 
 animaisFiltrados.addAll(animais); 
 
 ServicoAdapter adaptador = new ServicoAdapter(this, animaisFiltrados); 
 listView.setAdapter((adaptador)); 
 
 registerForContextMenu(listView); 
 dao.close(); 
 } 
 
 public boolean onCreateOptionsMenu(Menu menu) { 
 MenuInflater i = getMenuInflater(); 
 i.inflate(R.menu.menu_principal, menu); 
 
 SearchView sv = (SearchView) 
menu.findItem(R.id.app_bar_search).getActionView(); 
 sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
 @Override 
 public boolean onQueryTextSubmit(String s) { 
 return false; 
 } 
 
 @Override 
 public boolean onQueryTextChange(String s) { 
 procuraAnimal(s); 
 return false; 
 } 
 }); 
 return true; 
 } 
 
 
public void onCreateContextMenu(ContextMenu menu, View v, 
ContextMenu.ContextMenuInfo menuInfo) { 
 super.onCreateContextMenu(menu, v, menuInfo); 
 MenuInflater i = getMenuInflater(); 
 i.inflate(R.menu.menu_contexto, menu); 
 } 
 
 // Método para pesquisa pelo nome do animal cadastrado , ao clicar no ícone 
de lupa 
 
 public void procuraAnimal(String nome) 
{ 
 animaisFiltrados.clear(); 
 for(Animal a : animais) { 
 if(a.getNome().toLowerCase().contains(nome.toLowerCase())) { 
 animaisFiltrados.add(a); 
 } 
 } 
 listView.invalidateViews(); 
 } 
 
 // Método que é executado ao pressionar em cima de um item da lista e 
clicar na opção excluir. 
 
 public void excluir(MenuItem item) { 
 AdapterView.AdapterContextMenuInfo menuInfo = 
 (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
 
 final Animal servicoExcluir = animaisFiltrados.get(menuInfo.position); 
 
 AlertDialog dialog = new AlertDialog.Builder(this) 
 .setTitle("Atenção!") 
 .setMessage("Realmente deseja excluir o serviço?") 
 .setNegativeButton("Não", null) 
 .setPositiveButton("Sim", new DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialogInterface, int i) { 
 animaisFiltrados.remove((servicoExcluir)); 
 animais.remove(servicoExcluir); 
 dao.open(); 
 dao.excluir(servicoExcluir); 
 dao.close(); 
 listView.invalidateViews(); 
 } 
 }).create(); 
 dialog.show(); 
 } 
 
 // Método que executa a atividade de cadastrar um serviço, para que o 
usuário possa preencher os dados a ser registrado. 
 
 
public void cadastrar(MenuItem item) { 
 Intent it = new Intent(this, CadastroServicoActivity.class); 
 startActivity(it); 
 } 
 
 // Método que é executado ao pressionar em cima de um item da lista e 
clicar na opção atualizar. 
 
 // Os dados desse item que foi editado são passados para a activity 
CadastrarServico, com isso sendo possível atualizar os dados desse animal 
baseado no ID. 
 
 public void atualizar(MenuItem item) { 
 AdapterView.AdapterContextMenuInfo menuInfo = 
 (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
 
 final Animal animalAtualizar = animaisFiltrados.get(menuInfo.position); 
 Intent it = new Intent(this, CadastroServicoActivity.class); 
 it.putExtra("animal", animalAtualizar); 
 startActivity(it); 
 } 
 
 @Override 
 public void onResume() { 
 super.onResume(); 
 dao.open(); 
 animais = dao.obterTodos(); 
 dao.close(); 
 animaisFiltrados.clear(); 
 animaisFiltrados.addAll(animais); 
 listView.invalidateViews(); 
 } 
} 
 
• Conexao.java 
 
package com.example.AVA2CadastroBanhoeTosa 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
 
import androidx.annotation.Nullable; 
 
// Atividade que cria conexão com o banco de dados SQLite 
 
public class Conexao extends SQLiteOpenHelper { 
 
 private static final String name = "banco.db"; 
 private static final int version = 1; 
 
 
public Conexao(Context context) { 
 super(context, name, null, 1); 
 } 
 
 @Override 
 public void onCreate(SQLiteDatabase db) { 
 db.execSQL("create table animal(id integer primary key autoincrement, " + 
 "servico char(20), raca varchar(30), nome varchar(50), pelo 
varchar(10), idade integer(2))"); 
 } 
 
 @Override 
 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
 
 } 
} 
 
 
Imagens da aplicação: 
 
 
 
 
 
 
 
 
 
 
 
 
 
Conclusão do desenvolvimento: 
 
A aplicação foi criada usando o Android Studio, com a linguagem de programação 
Java e conexão ao banco de dados via SQLite, integrado ao Android Studio. 
Aproveitamos diversos recursos avançados do Android Studio, que facilitam o 
desenvolvimento, como a capacidade de arrastar os elementos diretamente para o 
layout da tela e configurar seus atributos de forma ágil. 
 
 
Bibliografia: 
 
Criando uma app Android com banco de dados SQLite – LuizTools 
 
Criando um CRUD com Android Studio e SQLite 
 
Usar SQL para ler e gravar em um banco de dados (android.com) 
 
Datatypes In SQLite 
 
 
 
 
 
https://www.luiztools.com.br/post/criando-uma-app-android-com-banco-de-dados-sqlite/
https://www.devmedia.com.br/criando-um-crud-com-android-studio-e-sqlite/32815
https://developer.android.com/codelabs/basic-android-kotlin-compose-sql?hl=pt-br#0
https://www.sqlite.org/datatype3.html

Mais conteúdos dessa disciplina