[MUSIC] Bien, ha llegado la hora de comenzar a implementar la persistencia en la aplicación que hemos estado trabajando sobre nuestros contactos. Hemos tenido una lista de contactos donde tenemos una imagen y estamos habilitados también para dar like a un contacto, además estamos mostrando el nombre, también estamos mostrando el detalle del contacto, etc. Pero en este ejemplo lo que vamos a estar viendo es precisamente la manera manejar toda la persistencia de los datos en una aplicación móvil. Y esto va a ser a través de las bases de datos en android y bueno, vamos a utilizar SQLite, como you estuvimos platicando en vídeos anteriores. SQLite es el manejador oficial de bases de datos de Android. Y además vamos a aprender en este primer vídeo a implementar un modelo vista presentador. Un modelo vista presentador para poder tener un mejor control de nuestro proyecto. Muy bien, pues a continuación lo que les estoy mostrando en pantalla es simplemente un modelo muy pequeño de lo que planeamos hacer en este ejemplo. Este es nuestro modelo de datos, esto es lo que la base de datos que planeamos integrar en nuestro proyecto. Y como observamos pues simplemente tenemos dos tablas, por el momento es muy sencillo, pero esto puede ser tan complejo como tu quieras. Se recomienda que las bases de datos se van a estar guardando internamente en tu teléfono, lo vamos a ver y vamos a ver más a detalle cómo funciona. Pero se recomienda que los modelos de datos en el teléfono no sean tan complejos. Cuando nuestros modelos de datos se convierten en muy complejos, entonces es mejor empezar a utilizar otro tipo de persistencia, podemos utilizar en esos casos mejor un web service. Y entonces solamente localmente estar guardando los datos claves. Entonces tengo dos tablas, una tabla contacto, una tabla que se llama contacto_likes y como vimos pues tenemos la posibilidad de estar dando likes a nuestro contacto. Entonces en esa tabla vamos a estar guardando la cantidad de likes que va recibiendo un contacto, estaremos almacenando su id del contacto y el like que se le asignó en ese momento. En la otra tabla de contacto, tenemos todos los datos generales; el contacto, en sí su nombre, su teléfono, su email y su foto. Además de un identificador que es el mismo que estamos utilizando por acá en la tabla de contacto likes; perfecto. Entonces una vez que haya quedado claro nuestro modelo y el objetivo de hacia donde queremos ir, vamos a comenzar implementando nuestro modelo: vista- presentador. Entonces lo primero que debemos entender es que hasta el momento tenemos por aquí nuestros fragments. Tengo mi recycler view fragment. En este momento estoy utilizando un modelo vista- controlador. Así es como está funcionando mi proyecto. Es decir, tengo un archivo de Java que contiene un layout, en este caso mi layout que es fragment_recyclerview. Si vamos por allá este que tiene el recyclerview, esta sería la vista de mi aplicación o de mi pantalla. El controlador es este fragment este fragment recycler view fragment está controlando todos los elementos que contiene la vista. En este caso, lo único que está controlando es un recycler view de contactos. Entonces le está dando una forma de linear layout, le está colocando algunos datos y bueno, por acá tenemos un adaptador. Este es el controlador de mi vista y si tuviéramos nosotros que integrar una base de datos, el modelo vendría acompañado de mi pojo que es contacto y además de toda la integración con la base de datos. Así es como tendría un modelo que sería mi pojo con la base de datos, una vista que sería mi archivo xml, mi layout, y un controlador que hasta el momento sería mi fragment, mi archivo de Java, como lo vimos en el curso anterior. Entonces lo que voy a hacer ahora es que si yo empiezo integrar una base de datos en este proyecto. Pues de pronto todas las operaciones de la base de datos en algún momento van a estar también involucradas en este mismo archivo de Java, en esta misma clase. Entonces como observamos pues ahorita el archivo you se encuentra hasta cierto punto saturado, you tenemos muchas implementaciones aquí en este archivo. Entonces, lo que nosotros queremos lograr es que nuestro proyecto esté lo más legible a la vista, para eso vamos a estar organizando nuestro proyecto o dividiéndolo en un modelo vista- presentador. Entonces lo primero que nos dicta el modelo vista- presentador es que nosotros debemos organizar nuestro proyecto, ahora implementar algunas interfases. Donde todos los métodos que tengo implementados aquí, en mi clase, en mi controlador que ahorita está funcionando así, en mi fragment, puede ser en un fragment o en una actividad, cualquiera de los dos. Todos los métodos que tengo implementados por ejemplo; inicializar datos, inicializaAdaptador. Todos los métodos que estén aquí a la vista, que están controlando la vista pues ahora estén implementados en una interfaz, estén definidos en una interfaz. Y entonces yo estaré implementándolos en este archivo. Entonces antes de continuar con nuestro modelo vista presentador simplemente vamos a ir a nuestro archivo cardview contacto y lo que vamos a hacer. Ahorita tenemos esta vista, lo que haremos en nuestro cardview es integrar precisamente sólo una leyenda que aquí diga la cantidad de likes que este contacto, esta persona tiene hasta el momento. Entonces lo único que voy a hacer es alterar un poquito mi layout. Hasta ahora esto es lo que tengo, tengo un cardview, un LinearLayout con una orientación vertical. Consecuentemente tengo un Imageview y después viene mi LinearLayout que está abrazando mi icono y mis descripciones del contacto. Entonces voy a comenzar por atacar este LinearLayout. Voy a cambiarlo. Ahora vamos a definir un RelativeLayout. Entonces vamos a quitar de aquí también la Orientación. Vamos a ver si en la parte se modificó automáticamente. Voy a guardar mi archivo. Y entonces ahora tengo un RelativeLayout. Lo que voy a estar colocando en mi ImageButton. Como ahora estoy manejando un RelativeLayout tengo que definir, tengo que hacer un poco mas definida la posición de mis elementos. Entonces voy a colocar Android y le voy a decir que eso esté al ParentLeft, que sea igual a true, listo. Además voy a hacer que, como acá tengo otro LinearLayout que está abrazando a mis dos texts views, voy a decirle, voy a quitar primeramente este marginLeft. Y voy a decirle que ahora esto esté centrado horizontalmente, perfecto. Y por último lo que yo quiero agregar aquí es un text view. Un text view que estaré trabajando. Voy a copiar este que tengo aquí y lo voy a pegar. Y le voy a poner text view likes. Y vamos a nuestro archivo string simplemente a definir una variable, una variable que nos va a ayudar a contabilizar o a contar la leyenda del número de likes. Ahorita yo you la tenía dada de alta. Se llama plikes y lo único que tiene de leyenda dice cero likes. Entonces esto es lo que voy a poner aquí. Plikes, listo. Y vamos a darle una posición a esto. Tendrá una posición que esté al parentRight, vamos a buscarlo aquí el Right alignParentRight, ahí está. Y vamos a decirle true, y además vamos a decirle que esté centrado verticalmente. Y vamos a hacer un poco mas grande esa letra, la letra pues que esté casi al mismo tamaño que la variable, como el text view nombre. Entonces vamos a copiar esta propiedad que es text size del nombre y listo. Entonces esto es todo lo que tengo que editar en mi CardViewcontacto.xml. En mi layout simplemente he agregado la leyenda de likes y por supuesto si está cambiando esto, también voy a tener que cambiar mi modelo de datos. Por acá lo tengo, tenemos nuestro poyo. Vamos a nuestra clase contacto. Y entonces como vamos a estar ahora manejando los likes pues vamos a dar de alta otra variable private. Vamos a manejarlo como un entero y le voy a decir int likes. Vamos a decirle que esto lo agrege en el constructor. Esta ventanita la saqué simplemente presionando alt enter. Le decimos que sí, lo agregue en el constructor y que si es necesario haga un refactor. Ahí está. Y también necesitamos agregarlo, generar sus geders antiseters. Ahora, como observamos hace un momento en nuestro modelo de datos pues también estamos manejando un id, una id del contacto. Entonces el id del contacto, vamos a, también, agregarlo por aquí. Que sea private int id. Esto no tiene que estar presente en nuestro constructor puesto que se va a estar generando constantemente. Pero si debemos tener geders y seters. Entonces he generado geders and seters del atributo likes y del atributo id. El atributo likes es el único, de los que acabo de agregar, es el único que está siendo recibido como parámetro en el constructor. Muy bien. Entonces you tengo por ahí mi modelo contacto. Y entonces como esto es una cadenita pues también nos va a estar afectando en el contacto adaptador. Recuerda que el contacto adaptador lo utilizamos para mostrar nuestro RecycleView, para ir mostrando uno a uno cada elemento. Entonces en el adaptador configuro el nombre, configuro el teléfono, la imagen. Y ahora lo que voy a estar configurando también es la cantidad de likes. Entonces en el contacto adaptador yo, de acuerdo a los manuales que te dejé por ahí you estábamos manejando como darle clic a una foto. Estábamos manejando también un botón de like, que es lo que tenemos hasta el momento. Entonces vamos a nuestra clase anidada, nuestra InerClass, que se llama ContactoViewHolder. Y ahí vamos a añadir este nuevo atributo. Recuerda que tenemos un nuevo atributo que ahora es un text view, tvlikes, que está por aquí. Y entonces este lo tenemos que también dar de alta en nuestro contacto adaptador. Lo voy a dar de alta por acá. Y le vamos a poner private text view y va a decir tvlikes. Y también acá abajo vamos a ponerle tvlikes, listo. Esto es todo lo que tenemos que hacerle a nuestro ContactoViewHolder, simplemente dar de alta nuestro view para poder estarlo utilizando. Entonces vamos un poquito más arriba. Aquí en nuestro onBindViewHolder estaremos seteando al text view, pero en nuestro caso, nuestro text view likes, vamos a setearle el valor que debe tener en ese momento. Entonces voy a copiar esta línea que está aquí, la voy a pegar y le voy a poner teléfono. Le vamos a decir likes y vamos a decir get.Telefono, en este caso será get.Likes. Y probablemente aquí nos salte, en algún momento, un error en tiempo de ejecución, porque get.Likes lo estoy manejando en formato entero. Entonces en este momento no me marca ningún error pero como nuestro text view solamente acepta string, es necesario nosotros aquí hacer un un parseo. Le voy a decir String.valueOf. Y esto lo vamos a meter aquí a dentro. Y entonces esto lo único que me va a traer es un número entero. Yo necesito concatenarle. Yo necesito hacer que se vea como mi CardView, que diga el número entero, espacio, Likes, con L mayúscula. Entonces eso mismo es lo que voy a poner por acá, likes, listo. Hasta ahorita yo tengo ahí. you tengo mi text view, you tengo toda la funcionalidad hasta el momento de mi card view del nuevo atributo que estamos manejando, los likes. Entonces continuemos con nuestro modelo: vista presentador. Hasta el momento estamos manejando un modelo vista controlador, vamos a transformar esto en un modelo vista presentador. Para empezar a transformar esto en un modelo vista presentador, vamos a tener que generar una interfaz adicional para cada view. Vamos a concentrarnos primero en la vista. Recuerda que tenemos: modelo vista y presentador. Entonces primero vamos a ver la vista. En cuanto a la vista tenemos estas dos clases. Ahora la vista you no va a ser un archivo semi aislado, sino que ahora la vista la va a conformar nuestro archivo de Java en conjunto con nuestro archivo xml y además en conjunto con una interfaz que se va a llamar view model. Esta interfaz, como su nombre lo dice view model, va a ser el modelo de nuestra vista. O sea todos los métodos que nosotros tenemos por aquí acomodados, los vamos a dar de alta en nuestra interfaz. Lo vamos a estar manejando en nuestra interfaz. Entonces, por aquí vamos a empezar a crear nuestra intefaz. ¿Okay?. Entonces vamos a generar nuestra interfaz. Voy a posicionarme en mi carpeta, que ahora se llama vista fragment. Voy a darle clic derecho, Java Class y vamos a seleccionar interfase. Esta interfaz se va a llamar IRecycler view fragment view. Porque esto será nuestro view model, nuestro modelo de cómo está funcionando nuestro Recycler view fragment. Vamos a darle OK. Y lo que vamos a estar concentrando en este archivo son todos los métodos que están aquí en este Recycler view fragment. Entonces voy a comenzar por ir definiendo por acá mi primer método. Y, por ejemplo, aquí tenemos algo interesante. Tengo el método inicializar datos. Este método you no lo vamos a estar trabajando aquí, you no lo vamos a estar trabajando en esta interfase dado que este método no sería parte de la vista. Recuerda que la vista únicamente van a ser todas las interacciones directas con la interfaz de usuario. Y lo que está sucediendo en este método es que no hay una interacción directa con la interfaz de usuarios, sino la única interacción que existe es en un Arraylist. Entonces este método va a desaparecer de nuestro recycler view, de nuestra interfaz. No va a estar. Además, yo podría estar optimizando este recycler view, lo que tengo aquí y la forma en que muestro mi recycler view. Podría estar creando un método nuevo donde le diga que ese método cree ese recycler view en forma lineal o con esta forma. Posteriormente tendríamos inicializar datos e inicializar adaptador. [MUSIC]