Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE VEIGA DE ALMEIDA AVA2 PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Rio De Janeiro, RJ 2021 AVA2 PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Rio de Janeiro 1 SUMÁRIO 2 ENUNCIADO 3 CONTEÚDO 4 BIBLIOGRAFIA 2021 ÍNDICE 03 04 06 28 2. 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. 3. CONTEÚDO Esta apicação visa realizar o CRUD de disciplinas usando SQLite com java para android. Código da activity_main.xml <?xml version="l.0" encoding="utf-8"?> <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 android:id="@+id/lista" android:layout_width="312dp" android:layout_height="388dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="36dp" android:layout_marginEnd="8dp" android:layout_marginRight="Bdp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"></ListView> <Button android:id="@+id/btSair" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="20dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="sair" android:text="Sair do Aplicativo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/ btlncluir" app:layout_constraintTop_toBottomOf="@+id/lista" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:text="Gerenciamento de Disciplinas." app:layout_constraintBottom_toTopOf="@+id/lista" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.457" /> <Button android:id="@+id/btlncluir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="20dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="incluirDisciplina" android:text="lnserir Disiplina" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.078" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lista" /> </androidx.constraintlayout.widget.Constraintlayout> Código da actvity_tratar_disciplina.xml <?xml version="l.0" encoding="utf-8"?> <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=".TratarDisciplina"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="49dp" android:layout_marginleft="49dp" android:layout_marginTop="552dp" android:layout_marginEnd="274dp" android:layout_marginRight="274dp" android:layout_marginBottom="l31dp" android:onClick="alterarlnserir" android:text="Alterar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editText4" android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="lO" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.093" app:layout_constraintStart_toEndOf="@id/ textView7" app:layout_constraintTop_toBottomOf="@id/editText3" app:layout_constraintVertical_bias="0.103" /> <EditText android:id="@+id/editText3" android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="l0" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias ="0.093" app:layout_constraint5tart_toEndOf="@+id/ textView6" app:layout_constraintTop_toBottomOf="@+id/editText2" app:layout_constraintVertical_bias="0.069" /> <TextView android:id="@+id/textView7" android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp" android:layout_marginleft="Bdp" android:layout_marginTop="8dp" android:text="A3:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView6" app:layout_constraintVertical_bias="0.096" /> <TextView android:id="@+id/textView6" android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp"android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:text="A2:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/ textView5" app:layout_constraintVertical_bias="0.064" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="28dp" android:layout_marginleft="28dp" android:layout_marginTop="127dp" android:layout_marginEnd="258dp" android:layout_marginRight="258dp" android:layout_marginBottom="585dp" android:text="Nome da Disciplina:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <EditText android:id="@+id/editText" android:layout_width="356dp" android:layout_height="48dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="l72dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="Slldp" android:ems="l0" android:inputType="textPersonName" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textView4" android:layout_width="89dp" android:layout_height="31dp" android:layout_marginTop="20dp" android:text="Notas:" app:layout_constraintTop_toBottomOf="@+id/editText" tools:layout_editor_absoluteX="30dp" tools:ignore="MissingConstraints" /> <TextView android:id="@+id/textView5" android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="8dp" android:text="Al:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView4" app:layout_constraintVertical_bias="0.057" /> <EditText android:id="@+id/editText2" android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="l0" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias ="0.093" app:layout_constraintStart_toEndOf="@+id/textView5" app:layout_constraintTop_toBottomOf="@+id/textView4" app:layout_constraintVertical_bias="0.081" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="284dp" android:layout_marginleft="284dp" android:layout_marginTop="552dp" android:layout_marginEnd="39dp" android:layout_marginRight="39dp" android:layout_marginBottom="l31dp" android:onClick="excluir" android:text="Excluir" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="153dp" android:layout_marginleft="153dp" android:layout_marginTop="593dp" android:layout_marginEnd="l70dp" android:layout_marginRight="170dp" android:layout_marginBottom="90dp" android:onClick="voltar" android:text="Voltar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.Constraintlayout> Código do objeto Disciplina package com.example.disciplina; public class Disciplina { // Definição dos atributos li O atributo id não existia na versão anterior private long id; private String nome; private double al, a2, a3; // Métodos novos, de acesso do atributo id public long getld() { return id; } public void setld(long id) { this.id= id; } // Métodos de acesso (setters & getters) public String getNome() { return nome; } public void setNome(String nome) { if (!nome.isEmpty()) { this.nome= nome; } } public double getAl() { return al; } public void setAl(double al) { if (al >= O) { this.al= al; } } public double getA2() { return a2; } public void setA2(double a2) { if (a2 >= O) { this.a2= a2; } } public double getA3() { return a3; } public void setA3(double a3) { if (a3 >= O) { this.a3= a3; } } // Método construtor com definição dos valores-padrão public Disciplina() { nome= "Nome Disciplina"; al = O.O; a2 = O.O; a3 = O.O; } // Método de formatação dos dados para exibição na lista public String textolista() { String item; item = getNome(); item+= ¹¹\nAl: ¹¹+ String.format{ ¹1 %3.lf¹¹, getAl()); item+= ¹¹\tA2: ¹1 + String.format{ ¹1 %3.lf¹¹, getA2()); item+= ¹¹\tA3: ¹1 + String.format("%3.lf", getA3()); return item; } } Código do disciplina_dao(onde as definições de acesso ao banco de dados ficam) package com.example.disciplina; import java.util.Arraylist ; import java.util.List ; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite . SQLiteDatabase; // Camada de dados (Persistência) // Classe de definição para os acessos ao banco de dados public class Disciplina_DAO{ // Define um objeto banco de dados private SQLiteDatabase database; // Define as colunas da tabela private String [] columns = { DisciplinaSQLiteOpenHelper.COLUNA_/0 DisciplinaSQLiteOpenHelper.COLUNA_NOME DisciplinaSQLite0penHelper.COLUNA_A1 DisciplinaSQLiteOpenHelper.COLUNA_A2, DisciplinaSQLite0penHelper.COLUNA_A3 }; private DisciplinaSQLiteOpenHelper sqliteOpenHelper; // Método construtor public Disciplina_DAO(Context context) { sqliteOpenHelper = new DisciplinaSQLiteOpenHelper(context); } // Método para abrir o recurso de banco de dados public void open O throws SQLException{ database = sqliteOpenHelper.getWritableDatabase(); } // Método para fechar o recurso de banco de dados public void close() { sqliteOpenHelper.close (); } // Método de inclusão de registro public void inserir ( String nome, double al, double a2, double a3 ) { // Prepara os valores das colunas da tabela para a inserção ContentValues values = new ContentValues (); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); values.put ( DisciplinaSQLite0penHelper.COLUNA_A1 , String. va/ueOf(al) ); values.put ( DisciplinaSQLite0penHelper.COLUNA_A2, String. va/ue0f(a2) ); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A3, String. va/ue0f(a3) ); // Efetua a inclusão com retorno do id do registro long insertld = database.insert ( DisciplinaSQLiteOpenHelper.TABELA , null , values ); } // Método para atualização de um registro da tabela // Recebe os dados para a inserção public void alterar(long id, String nome, double al, double a2, double a3){ li Prepara os dados para a atualização ContentValues values= new ContentValues (); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_Al , String. va/ueOf(al) ); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A2, String. va/ue0f(a2) ); values.put ( DisciplinaSQLite0penHelper.COLUNA_A3, String. va/ue0f(a3) ); // Efetua a alteração do registro, de acordo com o id do registro database.update(DisciplinaSQLiteOpenHelper. TABELA, values, DisciplinaSQLiteOpenHelper.COLUNA_/0 + ¹¹ = 11 + id, null); } // Método para a exclusão de um registro li Recebe o id do registro que será excluído public void apagar ( long id ) { li Exclui o registro a partir do id database.delete ( DisciplinaSQLiteOpenHelper. TABELA , DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11 = 11 + id , null ); } // Método de busca de registro a partirdo id li Busca os dados de cada registro a partir do id li Retorna um objeto Disciplina com os dados do registro public Disciplina buscar ( long id ) { li Realiza a busca a partir do id do registro li Usado para buscar os dados para a montagem da tela e li para a alteração ou exclusão do registro li O objeto cursor armazena os registros da consulta li Como o filtro é o id, apenas um registro será selecionado Cursor cursor= database.query( DisciplinaSQLiteOpenHelper.TABELA, columns , DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11 = 11 + id, null , null , null , null ); cursor . moveToFirst (); li Cria um objeto Disciplina auxiliar para retornar o objeto Disciplina disciplina= new Disciplina (); li Preenche os dados do registro do banco li nas propriedades do objeto auxiliar disciplina.setld ( cursor.getlong (O)); disciplina.setNome ( cursor.getString (1) ); disciplina.setAl ( cursor.getDouble (2) ); disciplina.setA2 ( cursor.getDouble (3) ); disciplina.setA3 ( cursor.getDouble (4) ); li Fecha o recurso do cursor cursor.close(); li Retorna o objeto auxiliar do tipo Disciplina return disciplina ; } li Método de montagem da lista de registros das disciplinas li Monta a lista de disciplinas para a carga da lista na tela principal li O método retornará uma lista com todas as disciplinas armazenadas li no banco public List <Disciplina > getAII O { // Prepara um Arraylist para retorno dos registros armazenados no banco List <Disciplina > disciplinas= new Arraylist <Disciplina>() ; li Objeto cursor para armazenar temporariamente os dados li retornados pela consulta Cursor cursor= database. query ( DisciplinaSQLiteOpenHelper. TABELA , columns , null , null , null , null , null ); // Passa o ponteiro para o primeiro registro do cursor cursor. moveToFirst (); li Para cada registro, os dados da tabela são copiados para li o objeto Disciplina da lista while (!cursor.isAfterLast ()) { Disciplina disciplina= new Disciplina (); disciplina.setld ( cursor. getlong (O)); disciplina.setNome ( cursor. getString ( 1) ); disciplina.setAl ( cursor.getDouble (2) ); disciplina.setA2 ( cursor.getDouble (3) ); disciplina.setA3 ( cursor.getDouble (4) ); disciplinas.add ( disciplina ); cursor. moveToNext (); } // Fecha o cursor cursor. close (); // Retorna à lista de disciplinas return disciplinas; } } Código do SQLiteOpenHelper (para definição da tabela e atributos) package com.example.disciplina; import android.content.Context ; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DisciplinaSQLiteOpenHelper extends SQLiteOpenHelper { // Definição da tabela e dos atributos li Os espaços antes e depois dos nomes são importantes, li pois será criada uma QUERY (consulta) com esses identificadores public static final String TABELA = "Disciplina "; public static final String COLUNA_ID = "id" ; public static final String COLUNA_NOME = "nome"; public static final String COLUNA_Al = "al"; public static final String COLUNA_A2 = "a2"; public static final String COLUNA_A3 = "a3"; li Define o nome do banco de dados private static final String DATABASE_NAME = "disciplinas.db"; li Define a versão do banco li O valor deve ser incrementado somente em casos de alterações li na estrutura do banco (tabelas e atributos) private static final int DATABASE VERS/ON = 1; li String de criação da tabela no banco de dados private static final String CRIAR_BANCO = "create table " + TABELA + "(" + COLUNA_ID + " integer primary key autoincrement , " + COLUNA_NOME + " text not null , " + COLUNA_Al + " double not null , " + COLUNA_A2 + " double not null , " + COLUNA_A3 + " double not null ) ;"; li Método construtor da classe para criação ou atualização do banco public DisciplinaSQLiteOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } li Cria o banco de dados, caso não exista @Override public void onCreate ( SQLiteDatabase database ) { database . execSQL ( CRIAR_BANCO ); } li Atualiza o banco de dados, caso seja uma nova versão @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { db. execSQL ("DROP TABLE IF EXISTS " +TABELA ); onCreate (db); } } Código do Controller da MainActivity package com.example.disciplina; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.content.lntent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.lterator; import java.util.List; public class MainActivity extends AppCompatActivity implements AdapterView.OnltemClicklistener{ // Componente lista da view ListView lista; // Declaração da intent lntent intent; li Determina o código da intent public static final int ACTIVITY-REQUEST-DISCIPLINA = 1; li Declara o objeto de persistência (acesso ao banco) private Disciplina_DAO dao ; li Vetor com os dados das disciplinas para apresentar na lista private String[] disciplinas; li Vetor com o id dos registros para identificar o registro li para os casos de seleção na lista para alteração ou li exclusão private long[] idDisiciplinas; @Override protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState); setContentView(R.layout.activity_main); lista = (ListView) findViewByld(R.id.lista); li Altera o título da janela da atividade setTitle("Banco de Dados com SQLite!"); li Cria o objeto de acesso ao banco dao = new Disciplina_DAO(this); li Abre o banco dao.open(); li Determina que os itens da lista serão clicáveis e li prepara o método de controle: onltemClick(..) lista.setOnltemClicklistener(this); li Clique no item } li Sempre que a atividade passar pelo método onResume, a lista li será atualizada @Override protected void onResume O { dao.open (); super.onResume (); li Prepara a lista que será exibida ao usuário na tela li Busca no banco todos os registros List<Disciplina > listaDisciplinas = dao.getAII(); li Define o tamanho dos vetores de disciplinas e id li em função do tamanho (quantidade de registros) da tabela disciplinas = new String[listaDisciplinas.size()]; idDisiciplinas = new long[listaDisciplinas.size()]; li Primeiro índice dos vetores int i =0; // Cria um objeto iterator para preencher o vetor de disciplinas li com os dados dos registros lterator<Disciplina> iterator = listaDisciplinas.iterator(); li Para cada registro preencher os vetores while (iterator.hasNext()) { li Objeto disciplina auxiliar Disciplina aux = new Disciplina(); li Recebe no objeto auxiliar os dados de cada registro aux = (Disciplina) iterator.next(); li Preenche o vetor de disciplinas para visualização na lista disciplinas[i] = aux.textolista(); li Preenche o vetor de id para identificação do registro li ao se escolher um elemento da lista para li a alteração ou exclusão idDisiciplinas[i] = aux.getld(); li Próximo item dos vetores i++; } // Carrega o ArrayAdapter com os dados do vetor de disciplinas ArrayAdapter <String > adapter = new ArrayAdapter<String >( this , android.R.layout.simple_list_item_l , disciplinas ); li Preenche a lista com os dados do ArrayAdapter lista.setAdapter( adapter ); } li Fecha o recurso de acesso ao banco sempre que a atividade passar li por uma pausa @Override protected void onPause O { li Libera o recurso de acesso ao banco dao.close(); super.onPause (); } li Método para seleção de um item da lista para li alteração ou exclusão (atende à interface: AdapterView.OnltemClicklistener) public void onltemClick(AdapterView<?> parent, View view, int position, long ident) { li Position é a posição do item na lista li Armazena o índice do elemento escolhido na lista long id = idDisiciplinas[position]; li Preparação da intent com previsão de retorno de dados intent = new lntent(getApplicationContext(), TratarDisciplina. class); // Passa os dados do item escolhido para a atividade de tratamento intent.putExtra("acao", O); intent.putExtra("id", id); // Chama a atividade startActivity(intent); } // Métodode controle para chamada da atividade secundária para inclusão public void incluirDisciplina(View v){ // lntent para chamar a atividade secundária intent = new lntent(getApplicationContext(), TratarDisciplina. class); // Passa os dados do item escolhido para a atividade de tratamento intent.putExtra("acao", -1); intent.putExtra("id", OL); // Chama a atividade startActivity(intent); } // Método para encerrar o aplicativo public void sair(View v){ finish(); } } Código do Controller TratarDisciplina package com.example.disciplina; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class TratarDisciplina extends AppCompatActivity { // Declaração dos componentes de tela EditText edl, ed2, ed3, ed4; Button btl, bt2; li Atributos de informações de acao: O : alteração ou exclusão li -1 : inclusão private int acao; li ld do registro para alteração ou exclusão li será usado com o método buscar para trazer os dados do registro private long id; @Override protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState); setContentView(R.layout.activity_tratar_disciplina); btl = (Button) findViewByld(R.id.button); bt2 = (Button) findViewByld(R.id.button2); edl = (EditText) findViewByld(R.id.editText); ed2 = (EditText) findViewByld(R.id.editText2); ed3 = (EditText) findViewByld(R.id.editText3); ed4 = (EditText) findViewByld(R.id.editText4); // Recebe os dados da atividade principal li e preenche a tela (view) acao = getlntent().getExtras().getlnt("acao"); id = getlntent().getExtras().getlong("id"); // Altera o título e prepara a tela if (acao == -1) { li Tela de inclusão li Usa dados-padrão setTitle("lnserir Disciplina"); btl.setText("lncluir"); bt2.setEnabled(false); edl.setText("Nome Disciplina"); ed2.setText(String.format("%.lf", O.O)); ed3.setText(String.format("%.lf", O.O)); ed4.setText(String.format("%.lf", O.O)); } else { li Tela de alteração ou exclusão setTitle("Alterar ou Excluir Disciplina"); li Cria um objeto Disciplina auxiliar para armazenar li os dados do registro Disciplina aux = new Disciplina(); // Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); // Abre o banco dao.open(); li Faz a consulta pelo id do registro para // buscar os dados na tabela aux = dao.buscar(id); // Preenche os dados do registro na tela edl.setText(aux.getNome()); ed2.setText(String. format("o/o. lf", aux.getAl())); ed3.setText(String. format("o/o. lf", aux.getA2())); ed4.setText(String. format("o/o. lf", aux.getA3())); // Libera o recurso de acesso ao banco de dados dao.close(); } } li Método para preparar os dados para retornar à atividade principal public void alterarlnserir(View v) { String nome; double al, a2, a3; li Pega os dados preenchidos na tela, li para inclusão ou alteração nome = edl.getText().toString(); al = Double.parseDoub/e(ed2.getText().toString()); a2 = Double.parseDoub/e(ed3.getText().toString()); a3 = Double.parseDoub/e(ed4.getText().toString()); li Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); li Abre o banco dao.open(); // Determina a ação if (acao == -1) { li Ação de inserção li Realiza a inclusão da disciplina na tabela dao.inserir(nome, al, a2, a3); } else{ li Ação de alteração li Realiza a alteração do registro correspondente na tabela dao.alterar(id, nome, al, a2, a3); } li Libera o recurso de acesso ao banco dao.close(); li Encerra a atividade, retornando à atividade principal finish(); } li Método para a exclusão de um registro de acordo com o id da disciplina public void excluir(View v) { li Confere se é uma ação de alteração ou exclusão if (acao == O) { li Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); // Abre o banco dao.open(); // Realiza a exclusão do registro por meio do id dao.apagar(id); // Libera o recurso de acesso ao banco dao.close(); } // Encerra a atividade, retornando à atividade principal finish(); } public void voltar(View v) { // Encerra a atividade, retornando à atividade principal finish(); } } Screenshots da aplicação Tela principal {MainActivity) INSERIR DISIPLINA SAIR DO APLICATIVO Tela de inserir disciplina (Activity TratarDisciplina) Alterar ou Excluir Disciplina Nome da o,sc,pllna: Sistemas da informação Notas: A1 10.0 A2. AJ. 10.0 9:43 0 ., '9' 61·. Inserir Disciplina Nome da Disciplina: Estatística Notas Al: 8 5 A3. FHIHII Ffüfüi Eiiii%1 liih·ifül E·iiifai EMCLUIR Tela de listagem das disciplinas 9:44 0 ,,/ <i§" 6h Banco de Dados com SQLite! Gerenciamento de Disciplinas. Estatística A 1: 8.0 A2: 5.0 A3: 7.0 Sistemas da informação A1: 10.0 A2: 10.0 A3: 10.0 INSERIR DISIPLINA SAIR DO APLICATIVO Tela de vizualização da disciplina (e exclusão) 9:44 0 ,,/ 6h Alterar ou Excluir Disciplina Nome da Disciplina: Sistemas da informação Notas: A¹ 10.0 A2'10.0A3: 10.0NUHih&E'HHIIEiii'fü&4. BIBLIOGRAFIA• https://developer.android.com/training/data-storage/sqlite?hl=pt-br• https://www.youtube.com/watch?v=h DSVInZ2JCs• https://www.devmedia.eom.br/criando-um-crud-com-android-studio-e-sglite/32815• https://www.luiztools.eom.br/post/7-dicas-valiosas-de-uso-do-sqlite-no-android/ Código da activity_main.xml <?xml version="l.0" encoding="utf-8"?> <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 android:id="@+id/lista" android:layout_width="312dp" android:layout_height="388dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="36dp" android:layout_marginEnd="8dp" android:layout_marginRight="Bdp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"></ListView> <Button android:id="@+id/btSair" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="20dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="sair" android:text="Sair do Aplicativo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/btlncluir" app:layout_constraintTop_toBottomOf="@+id/lista" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" a nd roid: layout_ heig ht= "wrap _ content" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:text="Gerenciamento de Disciplinas." app:layout_constraintBottom_toTopOf="@+id/lista" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.457" /> <Button android:id="@+id/btlncluir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="20dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="incluirDisciplina" android:text="lnserir Disiplina" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.078" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lista" /> </a nd roidx.constra i ntlayout. widget. Constra i ntlayout> Código da actvity_tratar_disciplina.xml <?xml version="l.0"encoding="utf-8"?> <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=" .TratarDisciplina" > <Button android:id="@+id/button" android:layout_width="wrap_content" a nd roid: layout_ heig ht= "wrap _ content" android:layout_margin5tart="49dp" android:layout_marginleft="49dp" android:layout_marginTop="552dp" android:layout_marginEnd="274dp" android:layout_marginRight="274dp" android:layout_marginBottom="l31dp" android:onClick="alterarlnserir" android:text="Alterar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editText4" android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="lO" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_ constraintHorizontal_bias ="0.093" app:layout_constraintStart_toEndOf="@id/textView7" app:layout_constraintTop_toBottomOf="@id/editText3" app:layout_constraintVertical_bias="0.103" /> <EditText android:id="@+id/editText3" android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="l0" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_ constraintHorizontal_ bias ="0.093" app:layout_constraint5tart_toEndOf="@+id/textView6" app:layout_constraintTop_toBottomOf="@+id/editText2" app:layout_constraintVertical_bias="0.069" /> <TextView android:id="@+id/textView7" android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp" android:layout_marginleft="Bdp" android:layout_marginTop="8dp" android:text="A3:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView6" app:layout_constraintVertical_bias="0.096" /> <TextView android:id="@+id/textView6" android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="Bdp" android:text="A2:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/textView5" app:layout_constraintVertical_bias="0.064" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="28dp" android:layout_marginleft="28dp" android:layout_marginTop="127dp" android:layout_marginEnd="258dp" android:layout_marginRight="258dp" android:layout_marginBottom="585dp" android:text="Nome da Disciplina:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <EditText android:id="@+id/editText" android:layout_width="356dp" android:layout_height="48dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="l 72dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="Slldp" android:ems="l0" android:inputType="textPersonName" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textView4" android:layout_width="89dp" android:layout_height="31dp" android:layout_marginTop="20dp" android:text="Notas:" app:layout_constraintTop_toBottomOf="@+id/editText" tools:layout_editor_absoluteX="30dp" tools:ignore="MissingConstraints" /> <TextView android:id="@+id/textView5" android:layout_width="52dp" android:layout_height="42dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginTop="8dp" android:text="Al:" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.088" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView4" app:layout_constraintVertical_bias="0.057" /> <EditText android:id="@+id/editText2" android:layout_width="91dp" android:layout_height="41dp" android:layout_margin5tart="8dp" android:layout_marginleft="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:ems="l0" android:inputType="numberDecimal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_ constraintHorizontal_ bias ="0.093" app:layout_constraintStart_toEndOf="@+id/textView5" app:layout_constraintTop_toBottomOf="@+id/textView4" app:layout_constraintVertical_bias="0.081" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="284dp" android:layout_marginleft="284dp" android:layout_marginTop="552dp" android:layout_marginEnd="39dp" android:layout_marginRight="39dp" android:layout_marginBottom="l31dp" android:onClick="excluir" android:text="Excluir" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin5tart="153dp" android:layout_marginleft="153dp" android:layout_marginTop="593dp" android:layout_marginEnd="l 70dp" android: layout_ marginRight=" 170dp" android:layout_marginBottom="90dp" android:onClick="voltar" android:text="Voltar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </a nd roidx.constra i ntlayout. widget. Constra i ntlayout> Código do objeto Disciplina package com.example.disciplina; public class Disciplina { // Definição dos atributos li O atributo id não existia na versão anterior private long id; private String nome; private double al, a2, a3; // Métodos novos, de acesso do atributo id public long getld() { return id; } public void setld(long id) { this.id = id; } // Métodos de acesso (setters & getters) public String getNome() { return nome; } public void setNome(String nome) { if (!nome.isEmpty()) { } } this.nome = nome; public double getAl() { return al; } public void setAl(double al) { if (al >= O) { this.al = al; } } public double getA2() { return a2; } public void setA2(double a2) { if (a2 >= O) { this.a2 = a2; } } public double getA3() { return a3; } public void setA3(double a3) { if (a3 >= O) { } } this.a3 = a3; // Método construtor com definição dos valores-padrão public Disciplina() { nome= "Nome Disciplina"; al = O.O; a2 = O.O; a3 = O.O; } } // Método de formatação dos dados para exibição na listapublic String textolista() { } String item; item = getNome(); item += 11\nAl: 11 + String.format{ 11%3.lf11 , getAl()); item+= 11\tA2: 11 + String.format{ 11%3.lf 11 , getA2()); item+= 11\tA3: 11 + String.format("%3.lf", getA3()); return item; Código do disciplina_dao(onde as definições de acesso ao banco de dados ficam) package com.example.disciplina; import java.util.Arraylist ; import java.util.List ; import android.content.ContentValues ; import android.content.Context; import android.database.Cursor; import android.database.SQLException ; import android.database.sqlite . SQLiteDatabase ; // Camada de dados (Persistência) // Classe de definição para os acessos ao banco de dados public class Disciplina_DAO { // Define um objeto banco de dados private SQLiteDatabase database; // Define as colunas da tabela private String [] columns = { DisciplinaSQLiteOpenHelper.COLUNA_/0 DisciplinaSQLiteOpenHelper.COLUNA_NOME DisciplinaSQLite0penHelper.COLUNA_A1 DisciplinaSQLiteOpenHelper.COLUNA_A2, DisciplinaSQLite0penHelper.COLUNA_A3 }; private DisciplinaSQLiteOpenHelper sqliteOpenHelper; // Método construtor public Disciplina_DAO(Context context) { sqliteOpenHelper = new DisciplinaSQLiteOpenHelper(context); } // Método para abrir o recurso de banco de dados public void open O throws SQLException { database = sqliteOpenHelper.getWritableDatabase(); } // Método para fechar o recurso de banco de dados public void close() { sqliteOpenHelper.close (); } // Método de inclusão de registro public void inserir ( String nome, double al, double a2, double a3 ) { // Prepara os valores das colunas da tabela para a inserção ContentValues values = new ContentValues (); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); values.put ( DisciplinaSQLite0penHelper.COLUNA_A1 , String. va/ueOf(al) ); values.put ( DisciplinaSQLite0penHelper.COLUNA_A2, String. va/ue0f(a2) ); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A3, String. va/ue0f(a3) ); // Efetua a inclusão com retorno do id do registro long insertld = database.insert ( DisciplinaSQLiteOpenHelper. TABELA , null , values ); } // Método para atualização de um registro da tabela // Recebe os dados para a inserção public void alterar(long id, String nome, double al, double a2, double a3){ li Prepara os dados para a atualização ContentValues values = new ContentValues (); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_NOME, nome ); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_Al , String. va/ueOf(al) ); values.put ( DisciplinaSQLiteOpenHelper.COLUNA_A2, String. va/ue0f(a2) ); values.put ( DisciplinaSQLite0penHelper.COLUNA_A3, String. va/ue0f(a3) ); // Efetua a alteração do registro, de acordo com o id do registro database.update(DisciplinaSQLiteOpenHelper. TABELA, values, DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11= 11 + id, null); } // Método para a exclusão de um registro li Recebe o id do registro que será excluído public void apagar ( long id ) { li Exclui o registro a partir do id database.delete ( DisciplinaSQLiteOpenHelper. TABELA , DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11 = 11 + id , null ); } // Método de busca de registro a partir do id li Busca os dados de cada registro a partir do id li Retorna um objeto Disciplina com os dados do registro public Disciplina buscar ( long id ) { } li Realiza a busca a partir do id do registro li Usado para buscar os dados para a montagem da tela e li para a alteração ou exclusão do registro li O objeto cursor armazena os registros da consulta li Como o filtro é o id, apenas um registro será selecionado Cursor cursor= database.query( DisciplinaSQLiteOpenHelper.TABELA, columns , DisciplinaSQLiteOpenHelper.COLUNA_/0 + 11 = 11 + id, null , null , null , null ); cursor . moveToFirst (); li Cria um objeto Disciplina auxiliar para retornar o objeto Disciplina disciplina = new Disciplina (); li Preenche os dados do registro do banco li nas propriedades do objeto auxiliar disciplina.setld ( cursor.getlong (O)); disciplina.setNome ( cursor.getString (1) ); disciplina.setAl ( cursor.getDouble (2) ); disciplina.setA2 ( cursor.getDouble (3) ); disciplina.setA3 ( cursor.getDouble (4) ); li Fecha o recurso do cursor cursor.close(); li Retorna o objeto auxiliar do tipo Disciplina return disciplina ; li Método de montagem da lista de registros das disciplinas li Monta a lista de disciplinas para a carga da lista na tela principal } li O método retornará uma lista com todas as disciplinas armazenadas li no banco public List <Disciplina > getAII O { } // Prepara um Arraylist para retorno dos registros armazenados no banco List <Disciplina > disciplinas = new Arraylist <Disciplina>() ; li Objeto cursor para armazenar temporariamente os dados li retornados pela consulta Cursor cursor= database . query ( DisciplinaSQLiteOpenHelper. TABELA , columns , null , null , null , null , null ); // Passa o ponteiro para o primeiro registro do cursor cursor. moveToFirst (); li Para cada registro, os dados da tabela são copiados para li o objeto Disciplina da lista while (!cursor.isAfterLast ()) { } Disciplina disciplina = new Disciplina (); disciplina.setld ( cursor. getlong (O)); disciplina.setNome ( cursor . getString ( 1) ); disciplina.setAl ( cursor.getDouble (2) ); disciplina.setA2 ( cursor.getDouble (3) ); disciplina.setA3 ( cursor.getDouble (4) ); disciplinas.add ( disciplina ); cursor. moveToNext (); // Fecha o cursor cursor. close (); // Retorna à lista de disciplinas return disciplinas; Código do SQLiteOpenHelper (para definição da tabela e atributos) package com.example.disciplina; import android.content.Context ; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DisciplinaSQLiteOpenHelper extends SQLiteOpenHelper { // Definição da tabela e dos atributos } li Os espaços antes e depois dos nomes são importantes, li pois será criada uma QUERY (consulta) com esses identificadores public static final String TABELA = "Disciplina "; public static final String COLUNA_ID = "id" ; public static final String COLUNA_NOME = "nome"; public static final String COLUNA_Al = "al"; public static final String COLUNA_A2 = "a2"; public static final String COLUNA_A3 = "a3"; li Define o nome do banco de dados private static final String DATABASE_NAME = "disciplinas.db"; li Define a versão do banco li O valor deve ser incrementado somente em casos de alterações li na estrutura do banco (tabelas e atributos) private static final int DATABASE VERS/ON = 1; li String de criação da tabela no banco de dados private static final String CRIAR_BANCO = "create table " + TABELA + "(" + COLUNA_ID + " integer primary key autoincrement , " + COLUNA_NOME + " text not null , " + COLUNA_Al + " double not null , " + COLUNA_A2 + " double not null , " + COLUNA_A3 + " double not null ) ;"; li Método construtor da classe para criação ou atualização do banco public DisciplinaSQLiteOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } li Cria o banco de dados, caso não exista @Override public void onCreate ( SQLiteDatabase database ) { database . execSQL ( CRIAR_BANCO ); } li Atualiza o banco de dados, caso seja uma nova versão @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { db. execSQL ("DROP TABLE IF EXISTS " +TABELA ); onCreate (db); } Código do Controller da MainActivity package com.example.disciplina; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.content.lntent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.lterator; import java.util.List; public class MainActivity extends AppCompatActivity implements AdapterView.OnltemClicklistener{ // Componentelista da view ListView lista; // Declaração da intent lntent intent; li Determina o código da intent public static final int ACTIVITY REQUEST DISCIPLINA = 1; - - li Declara o objeto de persistência (acesso ao banco) private Disciplina_DAO dao ; li Vetor com os dados das disciplinas para apresentar na lista private String[] disciplinas; li Vetor com o id dos registros para identificar o registro li para os casos de seleção na lista para alteração ou li exclusão private long[] idDisiciplinas; @Override protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState); setContentView(R.layout.activity _main); } lista = (ListView) findViewByld(R.id.lista); li Altera o título da janela da atividade setTitle("Banco de Dados com SQLite!"); li Cria o objeto de acesso ao banco dao = new Disciplina_DAO(this); li Abre o banco dao.open(); li Determina que os itens da lista serão clicáveis e li prepara o método de controle: onltemClick( .. ) lista.setOnltemClicklistener(this); li Clique no item li Sempre que a atividade passar pelo método onResume, a lista li será atualizada @Override protected void onResume O { dao.open (); super.onResume (); li Prepara a lista que será exibida ao usuário na tela } li Busca no banco todos os registros List<Disciplina > listaDisciplinas = dao.getAII(); li Define o tamanho dos vetores de disciplinas e id li em função do tamanho (quantidade de registros) da tabela disciplinas = new String[listaDisciplinas.size()]; idDisiciplinas = new long[listaDisciplinas.size()]; li Primeiro índice dos vetores int i =0; // Cria um objeto iterator para preencher o vetor de disciplinas li com os dados dos registros lterator<Disciplina> iterator = listaDisciplinas.iterator(); li Para cada registro preencher os vetores while (iterator.hasNext()) { } li Objeto disciplina auxiliar Disciplina aux = new Disciplina(); li Recebe no objeto auxiliar os dados de cada registro aux = (Disciplina) iterator.next(); li Preenche o vetor de disciplinas para visualização na lista disciplinas[i] = aux.textolista(); li Preenche o vetor de id para identificação do registro li ao se escolher um elemento da lista para li a alteração ou exclusão idDisiciplinas[i] = aux.getld(); li Próximo item dos vetores i++; // Carrega o ArrayAdapter com os dados do vetor de disciplinas ArrayAdapter <String > adapter = new ArrayAdapter<String >( this , android.R.layout.simple_list_item_l , disciplinas ); li Preenche a lista com os dados do ArrayAdapter lista.setAdapter( adapter ); li Fecha o recurso de acesso ao banco sempre que a atividade passar li por uma pausa @Override protected void onPause O { } li Libera o recurso de acesso ao banco dao.close(); super.onPause (); li Método para seleção de um item da lista para li alteração ou exclusão (atende à interface: AdapterView.OnltemClicklistener) public void onltemClick(AdapterView<?> parent, View view, int position, long ident) { li Position é a posição do item na lista li Armazena o índice do elemento escolhido na lista long id = idDisiciplinas[position]; li Preparação da intent com previsão de retorno de dados intent = new lntent(getApplicationContext(), TratarDisciplina. class); } } // Passa os dados do item escolhido para a atividade de tratamento intent.putExtra("acao", O); intent.putExtra("id", id); // Chama a atividade startActivity(intent); // Método de controle para chamada da atividade secundária para inclusão public void incluirDisciplina(View v){ } // lntent para chamar a atividade secundária intent = new lntent(getApplicationContext(), TratarDisciplina. class); // Passa os dados do item escolhido para a atividade de tratamento intent.putExtra("acao", -1); intent.putExtra("id", OL); // Chama a atividade startActivity(intent); // Método para encerrar o aplicativo public void sair(View v){ finish(); } Código do Controller TratarDisciplina package com.example.disciplina; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class TratarDisciplina extends AppCompatActivity { // Declaração dos componentes de tela EditText edl, ed2, ed3, ed4; Button btl, bt2; li Atributos de informações de acao: O : alteração ou exclusão li -1 : inclusão private int acao; li ld do registro para alteração ou exclusão li será usado com o método buscar para trazer os dados do registro private long id; @Override protected void onCreate(Bundle savedlnstanceState) { super.onCreate(savedlnstanceState); setContentView(R.layout.activity_tratar_disciplina); btl = (Button) findViewByld(R.id.button); bt2 = (Button) findViewByld(R.id.button2); edl = (EditText) findViewByld(R.id.editText); ed2 = (EditText) findViewByld(R.id.editText2); ed3 = (EditText) findViewByld(R.id.editText3); ed4 = (EditText) findViewByld(R.id.editText4); // Recebe os dados da atividade principal li e preenche a tela (view) acao = getlntent().getExtras().getlnt("acao"); id = getlntent().getExtras().getlong("id"); // Altera o título e prepara a tela if (acao == -1) { li Tela de inclusão li Usa dados-padrão setTitle("lnserir Disciplina"); btl.setText("lncluir"); bt2 .setEnabled(false); edl.setText("Nome Disciplina"); ed2.setText(String.format("%.lf", O.O)); ed3.setText(String.format("%.lf", O.O)); ed4.setText(String.format("%.lf", O.O)); } else { li Tela de alteração ou exclusão setTitle("Alterar ou Excluir Disciplina"); li Cria um objeto Disciplina auxiliar para armazenar li os dados do registro Disciplina aux = new Disciplina(); // Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); // Abre o banco dao.open(); li Faz a consulta pelo id do registro para // buscar os dados na tabela aux = dao.buscar(id); // Preenche os dados do registro na tela edl.setText(aux.getNome()); ed2 .setText(String. format("o/o. lf", aux.getAl())); ed3.setText(String. format("o/o. lf", aux.getA2())); ed4.setText(String. format("o/o. lf", aux.getA3())); // Libera o recurso de acesso ao banco de dados dao.close(); } } li Método para preparar os dados para retornar à atividade principal public void alterarlnserir(View v) { } String nome; double al, a2, a3; li Pega os dados preenchidos na tela, li para inclusão ou alteração nome = edl.getText().toString(); al = Double.parseDoub/e(ed2.getText().toString()); a2 = Double.parseDoub/e(ed3.getText().toString()); a3 = Double.parseDoub/e(ed4.getText().toString()); li Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); li Abre o banco dao.open(); // Determina a ação if (acao == -1) { li Ação de inserção } li Realiza a inclusão da disciplina na tabela dao.inserir(nome, al, a2, a3); else{ li Ação de alteração } li Realiza a alteração do registro correspondente na tabela dao.alterar(id, nome, al, a2, a3); li Libera o recurso de acesso ao banco dao.close(); li Encerra a atividade, retornando à atividade principal finish(); li Método para a exclusão de um registro de acordo com o id da disciplina public void excluir(View v) { li Confere se é uma ação de alteração ou exclusão if (acao == O) { li Cria o objeto de acesso ao banco Disciplina_DAO dao = new Disciplina_DAO(this); } } } // Abre o banco dao.open(); // Realiza a exclusão do registro por meio do id dao.apagar(id); // Libera o recurso de acesso ao banco dao.close(); // Encerra a atividade, retornando à atividade principal finish(); public void voltar(View v) { } // Encerra a atividade, retornando à atividade principal finish(); Screenshots da aplicação Tela principal {MainActivity) INSERIR DISIPLINA SAIR DO APLICATIVO Tela de inserir disciplina (Activity TratarDisciplina) 9440 �/��61-. Alterar ou Excluir Disciplina Nome da o,sc,pllna: Sistemas da informaçãoNotas: A1 10.0 A2. AJ. 10.0 FHIHII Eiiii%1 Ffüfüi 9:43 0 ., '9' �61·. Inserir Disciplina Nome da Disciplina: Estatística Notas Al: 8 5 A3. liih·ifül EMCLUIR E·iiifai Tela de listagem das disciplinas 9:44 0 ,,/ <i§" �6h Banco de Dados com SQLite! Gerenciamento de Disciplinas. Estatística A 1: 8.0 A2: 5.0 A3: 7.0 Sistemas da informação A1: 10.0 A2: 10.0 A3: 10.0 INSERIR DISIPLINA SAIR DO APLICATIVO Tela de vizualização da disciplina (e exclusão) 9:44 0 ,,/ � �6h Alterar ou Excluir Disciplina Nome da Disciplina: Sistemas da informação Notas: A1 10.0 A2' 10.0 A3: 10.0 NUHih& Eiii'fü& E'HHII 4. BIBLIOGRAFIA DM1-10 DM11-20 DM21-28
Compartilhar