Total de visualizações de página

Persistencia de Dados Android - ROOM - Parte 2

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







Nenhum comentário:

Postar um comentário

Comandos para conectar automaticamente o firebase com o flutter.

     dart pub global activate flutterfire_cli\n    export PATH="$PATH":"$HOME/.pub-cache/bin"\n    flutterfire configu...