[MUSIC] Okay. Pues tengo aquí mi base de datos contacto que acabamos de crear en el ejemplo anterior, tengo aquí mis tres contactos. Lo único que hicimos fue crear una base de datos y generar una consulta para mostrar estos tres contactos. Entonces a continuación vamos a trabajar la parte del botón del like, vamos a empezar a hacer que este botón empiece a incrementar los likes de cada persona. Entonces, para ello, voy a regresar aquí a mi proyecto. Lo primero que tengo que trabajar es el método que debe estar en mi base datos, el método insertar un like de contacto. Si analizamos un poco por aquí, la idea es que cuando yo de like a este contacto pues en la tabla se inserte el id del contacto al cual le di like y además también el número de likes. Entonces insertaremos el id del contacto y en este caso estaremos insertando un constante que será uno. Entonces vamos a nuestra base de datos y aquí vamos a trabajar ese método, que va a estar atacando la tabla contacto likes. Voy a colocarle void insertarLikeContacto. Esto, de la misma forma como estamos trabajando aquí, nos conviene manejar un parámetro que sea ContentValues contentValues. Y va a trabajar exactamente lo mismo, de hecho van a ser muy similares. Voy a seguir utilizando mi objeto SQLiteDatabase. Voy a abrir la base de datos en el modo de escritura, entonces voy a poner db.insert y en este caso utilizaré ahora la tabla likes contacto. Pasaré un null y después los contentValues, nuestro objeto contentValues. Muy bien. Entonces ahora sí abrí una conexión es necesario cerrarla. Recuerden eso, tomenlo como regla general. Entonces este método va a estar insertando un contacto en la tabla contactos. Entonces vamos ahora a trabajar nuestro método de dar like a un contacto. Y entonces para ellos pues vamos a nuestro constructor. Recuerda que este solamente es el interactor, quien está interactuando con los métodos de la base de datos. Entonces vamos a poner aquí un public void dar like al contacto. Entonces este va a recibir como parámetro el contacto al cual le estamos dando like. Vamos a esperar un poco. Vamos a poner aquí el objeto contacto al cual le estamos dando like. Lo ponemos así. Y entonces pues abrimos nuestra base de datos, por aquí nuestra base de datos, le pasamos el contexto y ahí está. Y empezamos a generar nuestro objeto ContentValues, contentValues. Así, y ahora vamos a empezar a rellenar este objeto contentValues. Vamos a poner .put. Vamos a poner .put y lo primero es obtener el id del contacto. Vamos a estar atacando el id del contacto. ConstantesBasedatos, vamos a ponerle ID_, este. Y entonces aquí obtenemos el contacto al cual le dimos like. Y entonces aquí vamos a poner el ID de ese contacto. Voy aponer aquí contacto.getId. Listo. Entonces ahora en el siguiente pues voy a estar trabajando el número de likes. Vamos a poner aquí contact numero de likes. Y dijimos que esto siempre va a estar almacenando el valor uno. Entonces esto le podría generar aquí una variable que se llame like. Y vamos a decirle que cree una constant file, ahí está. Y vamos a decirle que sea de tipo int. Y va a tener el valor uno. you está. Perfecto. Entonces invocamos nuestro método insertar db. insertarLikeContacto, you tiene toda la lógica de insertar en la tabla, insertar en la tabla like contacto, y listo, you está dar like contacto. Entonces nos estamos yendo como de atrás para adelante. La idea es que cuando yo esté dando like aquí en uno de mis contactos, automáticamente este método comience a ejecutarse. Entonces lo único que you nos faltará es precisamente añadir este método que tenemos por aquí a nuestro botón de like, a nuestro botón que tenemos aquí. Nosotros cuando damos like lo que aparece es un mensaje y este mensaje lo podemos estar trabajando en nuestro recycler view que tenemos por aquí arriba. Vamos a buscarlo acá en nuestro proyecto. Lo tenemos en nuestro adaptador, nuestro contacto adaptador. Lo vamos a abrir y tenemos aquí botón de like. Esto lo hicimos con ayuda de un manual que les dejé en cursos, vídeos anteriores. Si no lo tienes por ahí está en el módulo de recycler view. Entonces lo que haremos aquí Este es el mensaje que estamos mostrando ahorita. Lo que vamos a hacer es que cuando alguien de like pues entonces esté llamando al constructor de contactos. Vamos a poner aquí constructor Okay. Y entonces, vamos a instanciar. Constructor de contactos. Y le vamos a pasar el activity que estamos pasando por acá arriba que es una variable que you tenemos declarada más arriba, una variable global. Que en este caso el activity va a representar nuestro contexto. En qué contexto estamos trabajando. Entonces voy a poner constructor de contactos.darLike. Y pasaremos el objeto contacto que estamos recibiendo por acá. Okay. Aquí lo tenemos. Este es el objeto contacto. Recuerda que lo obtenemos a partir de la lista con la posición entonces lo almacenamos en un objeto contacto. Aquí podemos pasar todo el objeto. Y finalmente con esto you estaremos insertando un like en nuestra base de datos. Entonces hasta ahorita con lo que tenemos Daremos click aquí. Y entonces, pues está mostrando el mensaje. Este [FOREIGN]. Y además estará insertando el número 1. Si vamos de nuevo al método. Estamos llamando a la base de datos. Le estamos poniendo el id del contacto al cual le dimos like. Y además, su valor, que es 1. Y además, por acá, le estamos mandando los datos. Al objeto: base de datos y lo estamos insertando en nuestra tabla contactos. Entonces como observas es toda una cadenita, así es como se va ejecutando y lo siguiente es que cuando yo you di like aquí, trabajar ese text view para que podamos estar recuperando los likes de la tabla. Entonces para eso vamos a nuestro nuestro constructor, y vamos a comenzar a crear otro método. Un método que sea obtener likes de contacto. Entonces lo que hará pues ese método será obtener los likes de la base de datos y mostrarlos en este text view. Entonces vamos a ponerle aquí: Public. Y lo que estaremos devolviendo será un valor entero porque estaremos devolviendo la cantidad de likes que es un número entero. Voy a poner obtener likes contacto. Le voy a decir que también tiene que recibir el objeto contacto. Y listo. ¿Okay?. Entonces para yo poder obtener los likes del contacto lo que tendré que hacer será una consulta a la base de datos y entonces generar la suma de todos los contactos. Y de esta forma generar la cantidad de likes que tiene. Este, un contacto en particular. Entonces lo que haremos a continuación será precisamente nuestro método de la base de datos que ejecutará el query necesario. Para generar la suma de todos los contactos. Entonces voy a decirle que será un public. Y que me devolverá la cantidad de likes. Entonces voy a poner aquí obtenerLikesContacto. Y va a recibir el objeto contacto, porque necesitamos conocer pues a partir del id del contacto. Cuántos likes tiene ese contacto en particular. Entonces voy a poner aquí una variable local. Y la voy a inicializar en 0. Que será la variable que estaremos devolviendo. ¿Okay? Voy a poner return likes. Listo, entonces ahora vamos. Por acá a definir nuestro query. ¿Okay? My query será un objeto de tipo string. Y le voy a poner query. Y lo que estaré haciendo será un select count. Si recordamos cómo está descrito nuestro modelo. Lo que va a tener esta tabla será pues simplemente un montón de ids de contacto. Entonces, si por ejemplo, Anahí Salgado le pertenece el id 1, a Pedro le pertenece el id 2. Doy like a Anahí Salgado, se insertará. Su id que será 1. Y la cantidad de likes que será 1. Y si de nuevo doy like a Anahí de nuevo será 1 1. Ahora si doy like a Pedro será 2 1. Si de nuevo doy like a Pedro, 2 1. Y si de nuevo lo hago 2 1. Entonces tendré como toda la cantidad de veces. O la cantidad de likes que se le dio a Anahí Salgado. Lo que haré será ejecutar un filtro a partir del id del contacto. Generar la suma de likes. Será uno más uno más uno más uno. Así toda la cantidad de likes que van. Y entonces, eso será lo que estaré devolviendo. Con la función count es como hacemos precisamente la suma. Del campo, ejecutaron la suma de los valores que contiene este campo. Entoces este campo es el que vamos a estar pasando aquí al Count; le voy a poner constates bases de datos y le vamos a poner Número de likes. ¿Okay? Vamos a poner por acá un más. Y lo siguiente será, eso es lo único que quiero obtener. ¿Okay? Es el único dato que quiero obtener Y lo voy a poner aquí, le voy a decir from, de la tabla. Constantes, bases de datos punto. La base de datos se llama like contacto. Sigo concatenando y le voy a decir where donde. Le voy a decir tráeme la suma del campo número de likes de la tabla likes contacto donde el id coincida con el id que estoy trayendo de este objeto. Entonces le voy a decir aquí: Constantes.likes, id contactos. Este es el que necesitamos y voy a concatinar: más- igual. Entonces es el nombre del campo que es id igual al valor, osea el valor sería el id del contacto que estoy pasando aquí como parámetro. Sería contacto punto get id y listo; you quedó perfecto mi query. Es el único dato que me va a devolver, es un número que será la suma de todos los likes de un contacto en particular. Ahora vamos con ese SQlitedatabase. Vamos a declarar nuestro objeto Vamos a poner this. Readable. Y entonces voy a estar ejecutando el query. Y los datos los voy a estar recuperando en un cursor. Le voy a poner db.rawquery. Y necesitamos el query. Y aquí le vamos a pasar ningún argumento, porque el argumento lo estuvimos concatenando en nuestro query. ¿Okay? Bien, entonces, una vez que you tenemos los registros, podemos estar iterando. Okay. Vamos a estar en este caso pues nos va a traer un único dato. Pero vamos a continuar con nuestra estructura de while, le vamos a decir moveToNext. Aquí en realidad podría ser un if, por ejemplo podríamos decir if moveToNext porque será un único dato, un único campo y un único registro. Y le vamos a decir que los likes, éste valor será un número entero, pues se lo coloque al campo likes que es el que estoy devolviendo. Entonces le diré registros.getInt, así lo necesito recuperar. Y viene el índice de la columna. Como es la única columna que estoy manejando pues entonces es el índice cero. Y entonces ahora pues simplemente cerramos la conexión, es muy importante eso. Y listo, you quedó. you tenemos nuestro obtener likes, esto está en nuestra clase base de datos entonces habíamos dejado pendiente aquí el constructor contactos. Nuestro método que también se llama obtener likes. Lo que haremos ahí será llamar nuestro método de la base de datos. Recuerda que lo manejamos así porque nuestra intención es que todo esto quede separado, que la capa de los datos quede separada. Y entonces de esta forma podemos estar cambiando la fuente de los datos sin que nos afecte a todo el proyecto, sin que estemos teniendo que hacer más ajustes al código. Simplemente puedo añadir una clase más o puedo a lo mejor modificar mi clase o lo que sea, pero you no está afectando a todo lo demás del código. Ok, entonces listo. you tenemos nuestro método obtener likes que conecta, obtiene los likes a partir de una base de datos y entonces ejecutamos el método de la base de datos. Ahora, obtener likes pues nos faltaría llamarlo... Cuando damos clic aquí. Y eso lo tenemos por acá en nuestro, vamos a abrir este, lo tenemos en nuestro adaptador, acá está, en nuestro contacto adaptador. Y you habíamos hecho que cuando alguien le de like muestra un mensaje, inserta en la base de datos y además lo siguiente que tiene que hacer es refrescar este text view. O sea para refrescarlo sería mostrar los datos o mostrar la cantidad de likes que va en ese momento y entonces para ello ejecutará la consulta en la base de datos, etcétera. Entonces aquí simplemente lo que haremos nosotros será con nuestro ContactoViewHolder obtener el text view likes. Este, el que habíamos dejado ahí desde un principio del ejercicio y le voy a poner contactoViewHolder.tvlikes y le voy a decir setText Constructor. Contactos.obtenerLikes de contacto. Y recibe el objeto al cual le estamos dando like y del cual tiene que recuperar los likes. Y bueno, esto pues nada más lo único que va a obtener es un número entero y entonces. Y you está ahí, vamos a ver, damos un like y ahí está, diste like a Anahí Salgado. Podemos dar like a Pedro, se está refrescando esto también. Damos dos likes por acá, dos, tres, cuatro. Y entonces está funcionando a la perfección. Entonces todo esto pues es persistente. Si observas, pues cada vez que corramos nuestro proyecto se vuelven a insertar tres registros más. Entonces bueno you nada más. Podríamos controlar un poco eso, pero pues bueno, cada registro es diferente a pesar de que los datos pues sean los mismos, cada registro está almacenando con un identificador distinto. Entonces habíamos dejado por aquí pendiente, vamos por ejemplo a terminar la aplicación, vamos a iniciarla de nuevo y por ejemplo esto es lo que sucede. Abrimos la aplicación y de entrada pues no nos trae la cantidad de likes hasta que damos un like. Entonces, esto es porque al momento de nosotros estar corriendo nuestro proyecto, pues no se está aquí trayendo los likes, o más bien no estamos aquí en nuestra base de datos. En nuestra base de datos tenemos el método obtener todos los contactos. Este es el método que se está ejecutando cuando corremos el proyecto, cuando terminamos las actividades. Y entonces se ejecuta nada mas se rellenan todos estos campos, el ID, el nombre, el teléfono, el email, la foto, pero no estamos obteniendo la cantidad de likes que necesitamos. Entonces para ello lo que haremos será pues ejecutar aquí dentro de nuestro while un query más que precisamente recupere los likes de cada item o de cada contacto. Entonces voy a poner aquí un string, le voy a poner queryLikes. Y mi consulta será pues la misma, será la misma. Necesito tener un count de, aquí vamos a poner, de número, aquí nos falta la de constantes, bases de datos punto número de likes. Eso es lo que necesito obtener count y le voy a poner aquí un alias. As likes, ¿Ok? Que se llame likes para poder obtenerlo más fácilmente. Vamos a seguir concatenando. Vamos a seguir concatenando. Y ahora pondré from tabla, la tabla es ConstantesBaseDatos y la tabla con LIKES_CONTACT. Y voy a poner mi where, mi filtro: Where constantes base de datos punto. Que es likes_contact. ¿Okay?. Aquí más bien sería where el id. Aquí nos falta el id, el id del contacto. Donde el id del contacto sea concatenamos igual al contacto actual. En este caso lo tenemos aquí. Este es el que estamos recuperando. Contacto actual.getId(). ¿Okay?. getId() punto y coma. you está. Perfecto, you está listo nuestro query. Entonces a continuación lo que haremos será de la misma forma recuperarlo en un cursor. Le voy a poner registros de likes igual a db.rawquery. Le vamos a poner nuestro query de query likes. Y como los filtros los colocamos en el string, pues le pongo por ahí nulo. Y entonces comienzo a recuperar los datos. Okay? Entonces si hay likes, si existen likes, o sea si puedo mover, estar iterando, puedo estarme moviendo, en los registros. Quiere decir que si me está trayendo likes, le vamos a decir que le ponga setLikes le ponga el dato recuperado. Que sería registros likes.getInt(0), que es lo que tenemos abajo. Pero si no trae datos entonces que le ponga contacto actual.setLikes(0) el valor de cero, que le ponga 0 likes. Para que entonces aquí pues siga diciendo cero likes. Esto es todo lo que debemos hacer, you manejamos la parte de estar aquí trabajando recuperando los likes. Por acá you está cerrada la... Está cerrada aquí la conexión, entonces no hay problema. Vamos a ver qué pasa aquí. Okay, este no era el método que buscábamos, es el método rawQuery, y you está. Perfecto. Vamos a correr ésto, y la idea es que cuando ahora nuestra aplicación corra, automáticamente nos traiga you precargadas. La cantidad de likes que tiene cada contacto, cada foto. ¿Okay?. Entonces, vamos a esperar a que compile este proyecto. Y, como vemos, efectivamente you nos trajo la cantidad de likes que tenemos. Le voy a dar aquí, por ejemplo, a este, 2 likes. La voy a quitar. Y lo volvemos a correr. Aquí está. 5, 0 y 2. Perfecto. Entonces you estamos manejando la persistencia en nuestros datos. you estamos manejando likes, estamos insertando datos a una tabla, trayendo datos, ejecutando filtros. Etcétera. Si quieres ejecutar más queries puedes hacerlo de la misma forma con el método rawQuery. Utilizando tu objeto sqlitedatabase o también con el método execSQL. Generalmente utilizamos el método execSQL cuando ejecutamos un query que no nos va a traer algún valor de retorno, algún valor de respuesta. Y el método rawquery lo ejecutamos cuando sí vamos a tener un valor de retorno, en este caso; el cursor registros. Bien, entonces vamos a ver en nuestro siguiente vídeo. En nuestro siguiente módulo. Cómo podemos estar debuggeando esta base de datos. Y cómo podemos ver qué bueno que realmente los campos se estén insertando, que los likes estén. Estén realmente ahí en la tabla base de datos. Okay, nos vemos en el siguiente. [MUSIC]