Primeros pasos en Realm con Android

Primeros pasos en Realm con Android

Veremos cómo trabajar Realm con Android. Realm es una base de datos para aplicaciones móviles que es una excelente alternativa a SQLite. Veremos cómo instalar Realm en Android, y cómo configurar la base de datos.

Cómo instalar Realm con Android

Veamos cómo instalar Realm como un plugin de Gradle.

Ve al archivo build.gradle que está dentro de app -> src -> build.gradle

Archivo Build.gradle

Archivo Build.gradle

 

Abre el archivo y  añade ésta línea:

apply plugin: ‘realm-android’

Ir  al archivo build.gradle que está dentro de tu proyecto:

En la sección de dependencies añade ésta línea:

classpath “io.realm:realm-gradle-plugin:5.7.0″

Si tienes dudas o problemas puedes leer la documentación de Realm en https://realm.io/docs/java/latest

Actualiza las dependencias. Da clic en el enlace Sync Now.

Crear paquetes en la aplicación

Vamos a crear los siguientes paquetes:

Activities, App, Adapters y Models.

Da clic derecho sobre el equivalente a “com.example.gibgarcia.gibdata” en tu proyecto y elige New -> Package. A cada package dale el nombre ya indicado.

Mueve el MainActivity al paquete Activities (solo arrastra el archivo). Deberá verse todo así:

Vamos a crear dentro de models los archivos: Board y Note.

Crear las clases que definen la base de datos

En el paquete models agrega una clase llamada Board y luego una clase llamada Note (Click derecho sobre models, luego en New -> Java Class. Indica el nombre de Board, y repite para Note). La estructura debería quedar de la siguiente manera:

La clase Board (tablero) nos permitirá crear notas (Note). Veamos el código de cada clase.

Código de la clase Note

public class Note extends RealmObject {
    @PrimaryKey   //import io.realm.annotations.PrimaryKey
    private int id;
    @Required
    private String description;
    @Required
    private Date createdAt;  //imports java.util.Date

    public Note(String description){
        this.id = MyApplication.NoteId.incrementAndGet();
        this.description = description;
        this.createdAt = new  Date();

    }

    public int getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getCreatedAt() {
        return createdAt;
    }


}

Ésta clase hereda de RealmObject y define un modelo de datos para nuestra aplicación.

Observa que la clase (y el objeto de Base de Datos) Note contendrá un id, una descripción y la fecha en la que fue creada la nota.

Con anotaciones de Realm, le podemos indicar si es clave primaria o si el dato es requerido.

Código de la clase Board

La clase Board es muy parecida, solo que se programará para que un Board tenga varios Notes.

public class Board  extends RealmObject{
    @PrimaryKey   //import io.realm.annotations.PrimaryKey
    private int id;
    @Required
    private String title ;
    @Required
    private Date createdAt;  //imports java.util.Date

    private RealmList<Note> notes; //Un tablero puede tener muchas notas.


    //Realm requiere este constructor vacío.
    public Board(){

    }

    public Board(String title){
        this.id = MyApplication.BoardId.incrementAndGet();
        this.title = title;
        this.createdAt = new Date();
        this.notes = new RealmList<Note>();
    }

    public int getId() {
        return id;
    }



    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getCreatedAt() {
        return createdAt;
    }


    public RealmList<Note> getNotes() {
        return notes;
    }


}

Recuerda que puedes generar los setter y getter dado clic auxiliar y luego en generate. Nota que no estamos utilizando el setter de id ni el de createdAt.

Configuración de Realm con Android

Crea una nueva clase llamada MyApplication dentro del package app.

Código de la clase MyApplication

public class MyApplication extends Application {

    public static AtomicInteger BoardId  = new AtomicInteger();
    public static AtomicInteger NoteId = new AtomicInteger();


    @Override
    public void onCreate() {
        //Esta clase será ejecutada antes de nuestro ManinActivity
        //Aqui leemos de la BD cuál es el máximo valor de ID que tenemos
        super.onCreate();
        setUpRealConfig(); // Método para configurar la BD
        Realm realm = Realm.getDefaultInstance();
        BoardId = getIdByTable(realm, Board.class);
        NoteId = getIdByTable(realm, Note.class);
        realm.close();


    }

    private void setUpRealConfig(){
        Realm.init(getApplicationContext());
        RealmConfiguration config = new RealmConfiguration.Builder()
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm.setDefaultConfiguration(config);
    }

    private <T extends RealmObject> AtomicInteger getIdByTable (Realm realm , Class<T> anyClass){
       RealmResults<T> results = realm.where(anyClass).findAll();
       return (results.size()>0) ? new AtomicInteger(results.max("id").intValue()) : new AtomicInteger();

    }
}

Ésta clase se ejecutará antes de que se ejecute nuestro MainActivitiy (la primera interfaz de la aplicación), por lo que nos sirve para realizar la configuración por defecto de Realm, y para recuperar el último id de cada una de las tablas.

Para que la aplicación reconozca ésta clase, debemos incluirla en el archivo AndroidManifest.xml. Por ejemplo:

 

En el siguiente artículo continuaremos ésta aplicación.

 

¿Qué te pareció este artículo?
  • Poco informativo 
  • No era lo que buscaba 
  • Regular 
  • Interesante 
  • Excelente 
(Visto 5.422 veces)
Facebooktwitterlinkedinmail

Tu comentario

opiniones

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *







9 + 1 =