Saltar al contenido

Cómo hacer una aplicación de notas de Android con la base de datos de la sala

Crear un nuevo proyecto en Android Studio. Elija la plantilla «Actividad básica».

Agregar un repositorio Maven

A continuación, agregue un Repositorio Maven. Abrir el proyecto build.gradle y añadir la siguiente dependencia Maven

Cómo hacer una aplicación de notas de Android con la base de datos de la sala
Cómo hacer una aplicación de notas de Android con la base de datos de la sala
123456789allprojects { repositorios { google() jcenter() maven { url "https://maven.google.com" } }}

Entonces añadiremos una dependencia de la sala en build.gradle(Module:app) dentro del bloque de dependencia.

12345678dependencias {//... otras dependencias // Las dependencias de la sala compilan la anotación $0027android.arch.persistence.room:runtime:1.0.0$0027 Procesador $0027android.arch.persistence.room:compiler:1.0.0$0027}

Crear Entidad

Antes de crear una base de datos, vamos a crear una Entidad, llamada como Nota y más tarde, los objetos de esta clase se añadirán a la base de datos.

Para hacer esto:

  • Crea una clase llamada Note.
  • Añade la anotación @Entity en la clase.
  • Añade los campos de identificación, contenido y título.
  • Importante: marque al menos un campo con la anotación @PrimaryKey.
  • Use alt+insertar para implementar el constructor, anular el getter y el setter, y opcionalmente anular los iguales o toString.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677packagecom. ejemplo.pavneet_singh.roomdemo.notedb.model;importandroid.arch persistence.room Entidad;importandroid.arch persistence.room. PrimaryKey;@EntitypublicclassNote{@PrimaryKey(autoGenerate =true)privateint note_id;@ColumnInfo(name ="note_content")// el nombre de la columna será "note_content" en lugar de "content" en tableprivateString content;privateString title;privatepublicNote(int note_id,String content,String title){esto. note_id = note_id;this.content = content;this.title = title;}publicintgetNote_id(){return note_id;}public evidsetNote_id(int note_id){this. note_id = note_id;}publicStringgetContent(){retorno contenido;}publicvoidsetContent(String content){this.content = content;}publicStringgetTitle(){retorno título;}publicvoidsetTitle(String title){esto. title = title;}@Overridepublicbooleanequals(Object o){if(this== o)returntrue;if(!(o instanceofNote))returnnfalse;Note note note =(Note) o;if(note_id ! = note.note_id)returnnfalse;return title !=null? title.equals(note.title): note.title ==null;}@OverridepublicinthashCode(){int result = note_id; result =31* result +(title ! =null? title.hashCode():0);return result;}@OverridepublicStringtoString(){return "Note{"+"note_, content=$0027"+ content +$0027$0027$0027+", title=$0027"+ title +$0027$0027$0027+$0027}$0027;}}

java

Creando DAOs

Los DAO definen todos los métodos para acceder a la base de datos, anotados con la anotación @Dao. El DAO actúa como un contrato para realizar operaciones CRUD sobre los datos de una base de datos.

El siguiente código lo hará:

  • Crear una interfaz, marcada con la anotación @Dao.
  • Añadir métodos para las operaciones CURD.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748packagecom ejemplo_singh.roomdemo notedb dao;importandroid.arch.persistencia.room.Dao;importandroid.arch.persistencia.room.Delete;importandroid.arch.persistencia.room.Insert;importandroid. sala.de.persistencia.del.arco;importandroid.sala.de.persistencia.del.arco.Actualización;importtcom ejemplo.de.pavneet_singh roomdemo.notedb.modelo.Nota;importtcom ejemplo.de.pavneet_singh roomdemo.de.utilidad Constantes;importjava.lista.de.utilidad;@Interfaz.pública.de.DaoNoteDao{@Query("SELECT * FROM usuario "+Constantes. NOMBRE_TABLA_NOTA)List<Note;/* * Insertar el objeto en la base de datos * @param note, objeto a insertar */@Insertarvoidinsert(Note note);/* * Actualizar el objeto en la base de datos * @param note, objeto a actualizar */@Actualizarvoidupdate(Note repos); /* * eliminar el objeto de la base de datos * @param note, objeto a eliminar */@Deletevoiddelete(Note note);/* * eliminar la lista de objetos de la base de datos * @param note, array de objetos a eliminar */@Deletevoiddelete(Note. .. note);// Note... es varargs, aquí note es un array}

java

Crear base de datos

Ahora, tenemos la tabla definida como Entidad y los métodos CRUD definidos a través de NoteDao. La última pieza del rompecabezas de la base de datos es la propia base de datos.

Tendremos que hacerlo:

  • Crear una clase abstracta NoteDatabse que amplía la base de datos RoomDatabase.
  • Añadir la versión y las entidades a la base de datos como @Base de datos(entidades = {Nota.class}, versión = 1).
  • Añadir métodos abstractos de todos los DAO$0027s donde el objeto DAO devuelto será construido por Room para las interacciones de la base de datos.

Algunas cosas para recordar:

  • El número de versión se cambia para actualizar la estructura de la base de datos, cuando sea necesario en futuras actualizaciones
  • El nombre del archivo de la base de datos debe terminar con la extensión .db
  • La creación de instancias de bases de datos es bastante costosa, por lo que aplicaremos un Patrón de Singleton para crear y utilizar una instancia única ya instanciada para cada acceso a la base de datos.
123456789101112131415161718192021222324252627282930313233343536packagecom ejemplo.pavneet_singh.roomdemo notedb;importandroid.arch persistencia.sala.de.datos;importandroid.arch persistencia.sala.de.datos;importandroid. arch.persistencia.sala.de.datos;importandroid.contenido.de.la.base.de.datos;importtcom ejemplo.pavneet_singh roomdemo notedb.dao;importtcom ejemplo.pavneet_singh roomdemo.utiles;@Base.de.datos(entidades ={Nota. class}, version =1)publicabstractclassNoteDatabaseextendsRoomDatabase{publicabstractNoteDaogetNoteDao();privatestaticNoteDatabase noteDB; publicstaticNoteDatabasegetInstance(Context){if(null== noteDB){noteDB =buildDatabaseInstance(context);}regresar noteDB;}privatestaticNoteDatabasebuildDatabaseInstance(Context context){regresarRoom. databaseBuilder(context,NoteDatabase.class,Constants.DB_NAME).allowMainThreadQueries().build();}publicvoidcleanUp(){noteDB =null;}}

java

Además, es bueno notar que Room no permite la ejecución de código en el hilo principal. En su lugar, allowMainThreadQueries se utiliza para permitir la ejecución. Sin embargo, el uso de esto no está recomendado en aplicaciones reales. Esto es sólo para demostración, en su lugar usa AsyncTask (o el manejador, rxjava). El fragmento de AddNoteActivity.java demuestra cómo usar AsyncTask.