Saudações pessoal,
Hoje vou mostrar o código completo de suporte ao post
Persistencia de Dados Android - ROOM
Fiz um código auto-explicativo por ser complemento do post passado.
Como é possível ver na imagem não foram feitas alterações no manifeste.
No Gradle (Module) foi adicionado as linhas
// Roomimplementation "android.arch.persistence.room:runtime:1.0.0"annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
Estrutura de pastas: Dentro de model temos 3 classe Person, AppDatabase e PersonDao
Person é a nossa entidade
PersonDao é a interfaces que vai permitir usar os métodos relacionados a person.
AppDatabase é a classe abstrata que nos permite a conexão directa com o SQLite.
Na pasta "ui" temos apenas a MainActivity onde faremos uma boa parte do trabalho.
Vamos ao código
Person.java
@Entity(tableName = "person")
public class Person {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
private int id;
@ColumnInfo(name = "name")
private String name;
public int getId() {
return id; }
public void setId(int id) {
this.id = id; }
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
@Override public String toString() {
// Usei a ajuda do toString para mostrar os dados porque o foco não era adapter return getId()+" - "+getName(); }
}
PersonDao.java
@Daopublic interface PersonDao {
@Query("SELECT * FROM person")
List<Person> loadAll();
// metodo nao usado mas coloquei para ilucidar como pode ser criado @Query("SELECT * FROM person WHERE id IN (:ids)")
List<Person> loadAllByPersonId(int... ids);
// metodo nao usado mas coloquei para ilucidar como pode ser criado @Query("SELECT * FROM person where name LIKE :name LIMIT 1")
Person loadPersonByName(String name);
// metodo nao usado mas coloquei para ilucidar como pode ser criado @Insert void insertAll(Person... person);
@Insert void insert(Person person);
@Update void update(Person person);
@Delete void delete(Person person);
}
AppDatabase.java
@Database(entities = {Person.class},version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public abstract PersonDao personDao();}
MainActivity.java
package ao.co.a2xevolution.persistenciaandroidroom.ui;
import android.arch.persistence.room.Room;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;
import java.util.List;
import ao.co.a2xevolution.persistenciaandroidroom.R;import ao.co.a2xevolution.persistenciaandroidroom.model.AppDatabase;import ao.co.a2xevolution.persistenciaandroidroom.model.Person;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText txtName; private Button btnSave; private ListView lstPerson; private AppDatabase db;
private List<Person> people; private ArrayAdapter<Person> adapter; private Person person;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
person = new Person();
txtName = (EditText) findViewById(R.id.txtName); btnSave = (Button) findViewById(R.id.btnSave); btnSave.setOnClickListener(this); lstPerson = (ListView) findViewById(R.id.lstPerson);
lstPerson.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
delete(position); listAll(); return true; }
});
lstPerson.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
person = people.get(position); txtName.setText(person.getName()); }
});
// Usei a ajuda do toString para mostrar os dados porque o foco não era adapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1); lstPerson.setAdapter(adapter);
db = Room
.databaseBuilder(getApplicationContext(), AppDatabase.class, "Exemplo-cda")
.allowMainThreadQueries() // não usar esta linha na UI Principal .build(); listAll(); }
@Override public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSave:
if (person.getId() < 1) {
person.setName(txtName.getText().toString()); insert(); listAll(); txtName.setText(""); } else {
person.setName(txtName.getText().toString()); update(); listAll(); txtName.setText(""); }
break;
}
}
private void insert(){
db.personDao().insert(person); person = new Person(); }
private void update() {
db.personDao().update(person); person = new Person(); }
private void delete(int position) {
db.personDao().delete(people.get(position)); }
private void listAll() {
people = db.personDao().loadAll(); adapter.clear(); adapter.addAll(people); }
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.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="ao.co.a2xevolution.persistenciaandroidroom.ui.MainActivity">
<EditText android:id="@+id/txtName" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:ems="10" android:inputType="textPersonName" android:hint="Name" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
<Button android:id="@+id/btnSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:text="Save" app:layout_constraintBottom_toTopOf="@+id/lstPerson" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/txtName" />
<ListView android:id="@+id/lstPerson" android:layout_width="368dp" android:layout_height="385dp" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /></android.support.constraint.ConstraintLayout>
Espero ter ajudado com este post.
Se foi util para ti deixa um (y) comentario ou faça algum outro gesto para que eu saiba.
Bons estudos.
Link IQ Option