Ava2 - Programação para Dispositivos Móveis (IL10315)
Ava2 - Programação para Dispositivos Móveis (IL10315)
Ava2 - Programação para Dispositivos Móveis (IL10315)
Introdução
O código implementa as operações CRUD (Create, Read, Update, Delete) para interagir
com o banco de dados SQLite, que é uma parte importante do padrão arquitetural MVC. Aqui está
como as operações CRUD são realizadas no código:
1. **Create (Criar)**:
- A operação de criação é realizada quando o usuário insere novos dados através da
tela de cadastro (`CadastroActivity.java`).
- Quando o usuário preenche todos os campos e clica no botão "Gravar", os dados são
capturados dos campos de texto e inseridos no banco de dados SQLite.
- Isso é feito por meio da execução de uma instrução SQL de inserção (`INSERT INTO`)
no método `cadastrar()` da classe `CadastroActivity.java`.
- Os dados inseridos são persistidos no banco de dados para uso futuro.
2. **Read (Ler)**:
- A operação de leitura é executada para exibir os dados existentes na tela principal
(`MainActivity.java`) em forma de lista.
- Isso é realizado recuperando os registros armazenados no banco de dados SQLite e
exibindo-os na lista.
- A leitura dos dados é feita através da execução de uma consulta SQL (`SELECT`) no
banco de dados na classe `MainActivity.java`, no método `listarDados()`.
3. **Update (Atualizar)**:
- A operação de atualização é realizada quando o usuário deseja modificar os dados
existentes.
- Isso é feito através da tela de alteração (`AlterarActivity.java`), onde os dados
existentes são carregados nos campos de texto.
- Após fazer as alterações desejadas, o usuário clica no botão "Alterar", e os dados
modificados são atualizados no banco de dados.
- A atualização é realizada através da execução de uma instrução SQL de atualização
(`UPDATE`) no método `alterar()` da classe `AlterarActivity.java`.
4. **Delete (Excluir)**:
- A operação de exclusão é executada quando o usuário deseja remover um registro
existente.
- Isso é feito através de um clique longo em um item da lista na tela principal
(`MainActivity.java`).
- Quando o usuário confirma a exclusão na caixa de diálogo, o registro correspondente
é excluído do banco de dados SQLite.
- A exclusão é realizada através da execução de uma instrução SQL de exclusão
(`DELETE FROM`) no método `excluir()` da classe `MainActivity.java`.
Em resumo, as operações CRUD permitem ao usuário criar, ler, atualizar e excluir
registros no banco de dados SQLite, proporcionando uma experiência completa de manipulação
de dados dentro do aplicativo. Essas operações são essenciais para qualquer aplicativo que lida
com armazenamento e gerenciamento de dados.
Do MVC
<ListView
android:id="@+id/listViewDados"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="72dp"
android:layout_marginTop="64dp"
android:layout_marginEnd="72dp"
android:layout_marginBottom="179dp"
app:layout_constraintBottom_toTopOf="@+id/buttonCadastrar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/buttonCadastrar"
android:layout_width="175dp"
android:layout_height="96dp"
android:layout_marginBottom="71dp"
android:text="Cadastrar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/listViewDados" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.exemple.myapplication;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.util.ArrayList;
// Construtor vazio
public MainActivity() {
}
// Getters e Setters
public SQLiteDatabase getBancoDados() {
return bancoDados;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
listViewDados = findViewById(R.id.listViewDados);
botao = findViewById(R.id.buttonCadastrar);
botao.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
abrirTelaCadastro();
}
});
listViewDados.setOnItemLongClickListener(new
AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View
view, int position, long id) {
idSelecionado = arrayIds.get(position);
confirmaExcluir();
return true;
}
});
listViewDados.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
idSelecionado = arrayIds.get(position);
abrirTelaAlterar();
}
});
criarBancoDados();
listarDados();
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v,
insets) -> {
Insets systemBars =
insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top,
systemBars.right, systemBars.bottom);
return insets;
});
}
@Override
protected void onResume() {
super.onResume();
listarDados();
}
}
CadastroActivity.java
package com.exemple.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
// Construtor vazio
public CadastroActivity() {
}
// Getters e Setters
public EditText getEditTextNome() {
return editTextNome;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro);
bancoDados = openOrCreateDatabase("crudapp2",
MODE_PRIVATE, null);
String sql = "INSERT INTO banco2 (nome, sobrenome, idade,
data_nascimento, pais) VALUES (?, ?, ?, ?, ?)";
SQLiteStatement stmt = bancoDados.compileStatement(sql);
stmt.bindString(1, editTextNome.getText().toString());
stmt.bindString(2,
editTextSobreNome.getText().toString());
stmt.bindString(3, editTextIdade.getText().toString());
stmt.bindString(4,
editTextDataNascimento.getText().toString());
stmt.bindString(5, editTextPais.getText().toString());
stmt.executeInsert();
bancoDados.close();
finish();
} catch (Exception e){
e.printStackTrace();
}
//}
}
activity_cadastro
<EditText
android:id="@+id/editTextNome"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Nome"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editTextSobreNome"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Sobrenome"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextNome" />
<EditText
android:id="@+id/editTextIdade"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Idade"
android:inputType="number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextSobreNome"
/>
<EditText
android:id="@+id/editTextDataNascimento"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Data de Nascimento (dd/mm/aaaa)"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextIdade" />
<EditText
android:id="@+id/editTextPais"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="País"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextDataNascimento" />
<Button
android:id="@+id/buttonCadastrar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gravar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextPais" />
</androidx.constraintlayout.widget.ConstraintLayout>
AlterarActivity.java
package com.exemple.myapplication;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import com.exemple.myapplication.R;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alterar);
buttonAlterar = findViewById(R.id.buttonCadastrar);
editTextNome = findViewById(R.id.editTextNome);
editTextSobreNome = findViewById(R.id.editTextSobreNome);
editTextNumberIdade = findViewById(R.id.editTextNumberIdade);
editTextNacionalidade =
findViewById(R.id.editTextNacionalidade);
editTextDateNascimento =
findViewById(R.id.editTextDateNascimento);
carregarDados();
buttonAlterar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alterar();
}
});
}
editTextNome.setText(cursor.getString(cursor.getColumnIndex("nome")));
editTextSobreNome.setText(cursor.getString(cursor.getColumnIndex("sobr
enome")));
editTextNumberIdade.setText(cursor.getString(cursor.getColumnIndex("id
ade")));
editTextNacionalidade.setText(cursor.getString(cursor.getColumnIndex("
pais")));
editTextDateNascimento.setText(cursor.getString(cursor.getColumnIndex(
"data_nascimento")));
}
cursor.close();
bancoDados.close();
} catch (Exception e) {
e.printStackTrace();
}
}
activity.alterar.xml
<EditText
android:id="@+id/editTextNome"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Nome"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editTextNumberIdade"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="13dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Idade"
android:inputType="number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextSobreNome"
/>
<EditText
android:id="@+id/editTextNacionalidade"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:ems="10"
android:hint="Nacionalidade"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextNumberIdade"
/>
<Button
android:id="@+id/buttonCadastrar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="131dp"
android:text="Alterar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/editTextDateNascimento"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Nascimento"
android:inputType="date"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editTextSobreNome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="19dp"
android:ems="10"
android:hint="Sobrenome"
android:inputType="text"
app:layout_constraintStart_toStartOf="@+id/editTextNumberIdade"
app:layout_constraintTop_toBottomOf="@+id/editTextNome" />
</androidx.constraintlayout.widget.ConstraintLayout>
AndroidManifest.xml
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication"
tools:targetApi="31">
<activity
android:name=".AlterarActivity"
android:parentActivityName=".MainActivity"
android:exported="false" />
<activity
android:name=".CadastroActivity"
android:exported="false"
android:parentActivityName=".MainActivity"
/>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Telas
Tela Principal
Tela de Alteração:
Tela de Cadastro:
3. CONCLUSÃO
Este trabalho apresenta uma aplicação Android de CRUD (Create, Read, Update, Delete)
que permite ao usuário gerenciar registros em um banco de dados SQLite. A aplicação segue a
arquitetura MVC (Model-View-Controller), onde a `MainActivity` atua como o controlador,
interagindo com a interface do usuário (`View`) e manipulando os dados no banco de dados
(`Model`) por meio da classe `SQLiteOpenHelper`.
Cada tela da aplicação é responsável por uma operação específica do CRUD:
- `CadastroActivity`: Permite ao usuário inserir novos registros no banco de dados.
- `MainActivity`: Lista todos os registros existentes, oferecendo opções para visualizar,
editar e excluir cada um deles.
- `AlterarActivity`: Permite ao usuário editar um registro existente no banco de dados.
Além disso, a aplicação apresenta uma interface intuitiva para o usuário, com botões e
listas que facilitam a interação. Utiliza-se também o padrão de projeto Observer, onde a lista de
registros é atualizada automaticamente sempre que ocorre uma modificação no banco de dados.
DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. São Paulo: Pearson Prentice Hall,
2005. 1110 p. ISBN 8576050196. (BV).