Prévia do material em texto
<?xml version="1.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=".ItemForm"> <?xml version="1.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=".ItemForm"> 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. XML(View) activity_item_form.xml <?xml version="1.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=".ItemForm"> <Button android:id="@+id/btn_alterar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="44dp" android:layout_marginLeft="44dp" android:layout_marginTop=84dp" android:layout_marginBottom="16dp" android:onClick="alterarlnserir" android:text="Alterar" app:backgroundTint="#4CAF50" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/ txt_title_person" app:layout_constraintVertical_bias= > <EditText android:id="@+id/input_task_user_email" android:layout_width="257dp" android:layout_height="42dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:ems="10" android:inputType="text" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/txt_title_locate /> <EditText android:id="@+id/input_task_priority" android:layout_width="93dp" android:layout_height="42dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:ems=“10” android:inputType=”number” app:layout_constraintEnd_toStartOf=”@+id/input_task_user_email” app:layout_contraintHorizontal_bias=”0.0” app:layout_contraintStart_toStartOf=”parent” app:layout_contraintTop_toBottomOf=”@+id/txt_title_priority />” <TextView android:id="@+id/txt_title_locate" android:layout_width="63dp" android:layout_height="38dp" android:layout_marginTop="16dp" android:layout_marginEnd="208dp" android:layout_marginRight="208dp" android:text="Email" app:layout_constraintEnd_toEndOf="parent" app:layout_contraintTop_toBottomOf="@id+/input_task_description" /> <TextView android:id="@+id/txt_title_priority" android:layout_width="84dp" android:layout_height="38dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:text="Prioridade" app:layout_constraintStart_toStartOf="parent" app:layout_contraintTop_toBottomOf="@id+/input_task_description" /> <TextView android:id="@+id/txt_title_task" android:layout_width="98dp" android:layout_height="27dp" android:text="Titulo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.076" app:layout_constraintStart_toStarOf="parent" tools:layout_editor_abosoluteY="16dp" app:layout_contraintTop_toBottomOf="@id+/txt_title_task" tools:ignore=NotSibling /> <EditText android:id="@+id/input_text_title" android:layout_width="363dp" android:layout_height="48dp" android:layout_marginTop="22dp" android:ems="10" android:inputType="text" android:layout_marginEnd="208dp" android:layout_marginRight="208dp" android:text="Email" app:layout_constraintEnd_toEndOf="parent" app:layout_contraintStart_toStartOf="parent" app:layout_contraintTop_toBottomOf="@id+/txt_title_task" /> <TextView android:id="@+id/text_title_description" android:layout_width="100dp" android:layout_height="30dp" android:layout_marginTop="16dp" android:text="Descrição" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.077" app:layout_contraintStart_toStartOf="parent" app:layout_contraintTop_toBottomOf="@id+/input_task_title" /> <EditText android:id="@+id/input_task_description" android:layout_width="370dp" android:layout_height="74dp" android:layout_marginTop="16dp" android:ems="10" android:inputType="text" app:layout_constraintEnd_toEndOf="parent" app:layout_contraintStart_toStartOf="parent" app:layout_contraintTop_toBottomOf="@id+/txt_title_description" /> <Button android:id="@+id/btn_excluir" android:layout_width="warp_content" android:layout_height="warp_content" android:layout_marginTop="84dp" android:layout_marginEnd="20dp" android:layout_marginRight="20dp" android:layout_marginBottom="16dp" android:onClick="excluir" android:text="Excluir" app:backgroundTint="#4CAF50" app:layout_contraintBottom_toBottomOf="parent" app:layout_contraintEnd_toEndOf="parent" app:layout_contraintTop_toBottomOf="@+id/input_task_user" app:layout_constraintVertical_bias="0.0" /> <Button android:id="@+id/btn_voltar"android:layout_width="warp_content" android:layout_height="warp_content" android:layout_marginTop="16dp" android:layout_marginBottom="16dp" android:onClick="voltar" android:text="Voltar" app:backgroundTint="#4CAF50" app:layout_contraintBottom_toBottomOf="parent" app:layout_contraintEnd_toEndOf="parent" app:layout_contraintTop_toBottomOf="@+id/input_task_user"/ app:layout_contraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.0" /> app:layout_constraintVertical_bias="1.0" /> <TextView android:id="@+id/txt_title_person" android:layout_width="93dp" android:layout_height="44dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="32dp" android:text="Usuario" app:layout_constraintStart_toStartOf="parent” app:layout_constraintTop_toBottomOf="@+id/input_task_priority" /> <EditText android:id="@+id/input_task_user" android:layout_width="252dp" android:layout_height="48dp" android:layout_marginTop="28dp" android:ems="10" android:inputType="textPersonName” app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.52" app:layout_constraintStart_toEndOf="@+id/txt_title_person" app:layout_constraintTop_toBottomOf="@+id/input_task_priority" /> </androidx.constraintlayout. widget. ConstraintLayout> activity_main.xml <?xml version="1.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="298dp" android:layout_height="546dp" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="36dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent” app:layout_constraintTop_toTopOf="parent"></ListView> <Button android:id="@+id/btn_app_sair" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="20dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="sair" android:text="Sair" app:backgroundTint="#4CAF50" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.678" app:layout_constraintStart_toEndOf="@+id/btn_incluir_task" app:layout_constraintTop_toBottomOf="@+id/lista" /> <TextView android:id="@+id/txt_title_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" android:text="Lista de Items" 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/btn_incluir_task" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="20dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:onClick="incluirItem" android:text="Add Item" app:backgroundTint="#4CAF50" 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> Java Controller item.java package com.example.todolist; public class Item { private long id; private String title; private String description; private int priority; private String userEmail; private String user; public Item() { title = "Titulo do Item"; description = "Finalizar a AVA 2 da disciplina de Android"; priority = 1; userEmail = "moisesNaoConsegue@gmail.com"; user = "Moises"; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { if (!title.isEmpty()) { this.title = title; } } public String getDescription() { return description; } public void setDescription(String description) { if (!description.isEmpty()) { this.description = description; } } public int getPriority() { return priority; } public void setPriority(int priority) { if (priority >= 0) { this.priority = priority; } } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { if (!userEmail.isEmpty()) { this.userEmail = userEmail; } } public String getUser() { return user; public void setUser(String user) { if (!user.isEmpty()) { this.user = user; } } public String textoLista() { String item; item = getTitle(); item += "\nDescrição: " + getDescription(); item += "\nPrioridade: " + getPriority(); item += "\nEmail: " + getUserEmail(); item += "\nUsuario: " + getUser(); return item; } } item_DAO.java package com.example.todolist; 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 Item_DAO { private SQLiteDatabase database; private String[] columns = { ItemSQLiteOpenHelper.COLUNA_ID, ItemSQLiteOpenHelper.COLUNA_TITLE, ItemSQLiteOpenHelper.COLUNA_DESCRIPTION, ItemSQLiteOpenHelper.COLUNA_PRIORITY, ItemSQLiteOpenHelper.COLUNA_LOCATE, ItemSQLiteOpenHelper.COLUNA_PERSON }; private ItemSQLiteOpenHelper sqliteOpenHelper; public Item_DAO(Context context) { sqliteOpenHelper = new ItemSQLiteOpenHelper(context); } public void open() throws SQLException { database = sqliteOpenHelper.getWritableDatabase(); } public void close() { sqliteOpenHelper.close(); } public void inserir(String title, String description, intpriority, String locate, String person) { ContentValues values = new ContentValues(); values.put(ItemSQLiteOpenHelper.COLUNA_TITLE, title); values.put(ItemSQLiteOpenHelper.COLUNA_DESCRIPTION, description); values.put(ItemSQLiteOpenHelper.COLUNA_PRIORITY, String.valueOf(priority)); values.put(ItemSQLiteOpenHelper.COLUNA_LOCATE, locate); values.put(ItemSQLiteOpenHelper.COLUNA_PERSON, person); database.insert(ItemSQLiteOpenHelper.TABELA, null, values); } public void alterar(long id, String title, String description, int priority, String locate, String person) { ContentValues values = new ContentValues(); values.put(ItemSQLiteOpenHelper.COLUNA_TITLE, title); values.put(ItemSQLiteOpenHelper.COLUNA_DESCRIPTION, description); values.put(ItemSQLiteOpenHelper.COLUNA_PRIORITY, String.valueOf(priority)); values.put(ItemSQLiteOpenHelper.COLUNA_LOCATE, locate); values.put(ItemSQLiteOpenHelper.COLUNA_PERSON, person); database.update(ItemSQLiteOpenHelper.TABELA, values, ItemSQLiteOpenHelper.COLUNA_ID + "=" + id, null); } public void apagar(long id) { database.delete(ItemSQLiteOpenHelper.TABELA, ItemSQLiteOpenHelper.COLUNA_ID + " = " + id, null); } public Item buscar(long id) { Cursor cursor = database.query(ItemSQLiteOpenHelper.TABELA, columns, ItemSQLiteOpenHelper.COLUNA_ID + " = " +id, null, null, null ,null); cursor.moveToFirst(); Item item = new Item(); item.setId(cursor.getLong(0)); item.setTitle(cursor.getString(1)); item.setDescription(cursor.getString(2)); item.setPriority(cursor.getInt(3)); item.setUserEmail(cursor.getString(4));item.setUser(cursor.getString(5)); cursor.close(); return item; } public List<Item> getAll() { List<Item> items = new ArrayList<Item>(); Cursor cursor = database.query(ItemSQLiteOpenHelper.TABELA, columns, null, null, null,null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { Item item = new Item(); item.setId(cursor.getLong(0)); item.setTitle(cursor.getString(1)); item.setDescription(cursor.getString(2)); item.setPriority(cursor.getInt(3)); item.setUserEmail(cursor.getString(4)); item.setUser(cursor.getString(5)); items.add(item); cursor.moveToNext(); } cursor.close(); return items; } } itemForm.java package com.example.todolist; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class ItemForm extends AppCompatActivity { EditText input_task_title, input_task_desription, input_task_priority, input_task_user_email, input_task_user; Button btn_alterar, btn_excluir; private int acao; private long id; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item_form); btn_alterar = (Button) findViewById(R.id.btn_alterar); btn_excluir = (Button) findViewById(R.id.btn_excluir); input_task_title = (EditText) findViewById(R.id.input_task_title); input_task_desription = (EditText) findViewById(R.id.input_task_desription); input_task_priority = (EditText) findViewById(R.id.input_task_priority); input_task_user_email = (EditText) findViewById(R.id.input_task_user_email); input_task_user = (EditText) findViewById(R.id.input_task_user); acao = getIntent().getExtras().getInt("acao"); id = getIntent().getExtras().getLong("id"); if (acao == -1) { setTitle("Incluir Item"); btn_alterar.setText("Incluir"); btn_excluir.setEnabled(false); input_task_title.setText("Nome do Item"); input_task_desription.setText("Descrição do Item"); input_task_priority.setText("1"); input_task_user_email.setText("Email do usuario"); input_task_user.setText("Usuario"); } else { setTitle("Alterar ou Excluir Item"); Item aux = new Item();Item_DAO dao = new Item_DAO(this); dao.open(); aux = dao.buscar(id); input_task_title.setText(aux.getTitle()); input_task_desription.setText(aux.getDescription()); input_task_priority.setText(String.valueOf(aux.getPriority())); input_task_user_email.setText(aux.getUserEmail()); input_task_user.setText(aux.getUser()); dao.close(); } } public void alterarInserir(View v) { int priority; String title, description, user_email, user; title = input_task_title.getText().toString(); description = input_task_desription.getText().toString(); user_email = input_task_user_email.getText().toString(); user = input_task_user.getText().toString(); priority = Integer.parseInt(input_task_priority.getText().toString()); Item_DAO dao = new Item_DAO(this); dao.open(); if (acao == -1) { dao.inserir(title, description , priority, user_email, user); } else { dao.alterar( id , title, description, priority, user_email, user); } dao.close(); finish(); } public void excluir(View v) { if (acao == 0) { Item_DAO dao = new Item_DAO(this); dao.open(); dao.apagar(id); dao.close(); } finish(); } public void voltar(View v) { finish(); } } ItemSQLiteOpenHelper.java package com.example.todolist; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class ItemSQLiteOpenHelper extends SQLiteOpenHelper { public static final String TABELA = " Item "; public static final String COLUNA_ID = " id "; public static final String COLUNA_TITLE = " title "; public static final String COLUNA_DESCRIPTION = " description "; public static final String COLUNA_PRIORITY = " priority "; public static final String COLUNA_LOCATE = " locate "; public static final String COLUNA_PERSON = " person "; private static final String DATABASE_NAME = "items.db"; private static final int DATABASE_VERSION = 1; private static final String CRIAR_BANCO = " create table " + TABELA + "(" + COLUNA_ID + " integer primary key autoincrement , " + COLUNA_TITLE + " text not null , " + COLUNA_DESCRIPTION + " text not null, " + COLUNA_PRIORITY + " integer not null, " + COLUNA_LOCATE + " text not null, " + COLUNA_PERSON + " text not null);"; public ItemSQLiteOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database) { database.execSQL (CRIAR_BANCO); } @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { db. execSQL (" DROP TABLE IF EXISTS " + TABELA ); onCreate (db); } } MainActivity.java package com.example.todolist; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.Iterator; import java.util.List;public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { ListView lista; Intent intent; private Item_DAO dao ; private String[] items; private long[] idItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lista = (ListView) findViewById(R.id.lista); setTitle("Gerenciador de Items"); dao = new Item_DAO(this); dao.open(); lista.setOnItemClickListener(this); } @Override protected void onResume(){ dao.open(); super.onResume(); List<Item> listaItems = dao.getAll(); items = new String[listaItems.size()]; idItems = new long[listaItems.size()]; int i =0; Iterator<Item> iterator = listaItems.iterator(); while (iterator.hasNext()) { Item aux = new Item(); aux = (Item) iterator.next(); items[i] = aux.textoLista(); idItems[i] = aux.getId(); i++; } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items); lista.setAdapter(adapter); } @Override protected void onPause(){ dao.close(); super.onPause(); } public void onItemClick(AdapterView<?> parent, View view, int position, long ident){ long id = idItems[position]; intent = new Intent(getApplicationContext(), ItemForm.class); intent.putExtra("acao", 0); intent.putExtra("id", id); startActivity(intent); } public void incluirItem(View v){ intent = new Intent(getApplicationContext(), ItemForm.class); intent.putExtra("acao", -1); intent.putExtra("id", 0L); startActivity(intent); } public void sair(View v){ finish(); } } Aplicativo em execução. BIBLIOGRAFIA: STACK MOBILE. CRIANDO NOSSO PRIMEIRO APLICATIVO ANDROID - PARTE1 https://www.youtube.com/watch?v=JsipcxDE37E&ab_channel=StackMobile STACK MOBILE. CRIANDO NOSSO PRIMEIRO APLICATIVO ANDROID - PARTE 2 https://www.youtube.com/watch?v=yJfmxzZ8xTw&ab_channel=StackMobile DEVELOPERS ANDROID. DOCUMENTATION. https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper/ SIMPLIFIED CODING. #5 Android SQLite Database Tutorial – SQLiteOpenHelper https://www.youtube.com/watch?v=YbOU_6d_zC8