Estructurem la informació


En aquest apartat utilitzarem un objecte de tipus TinyDB per construir una agenda senzilla.



En aquest apartat es pretén donar resposta a les preguntes següents:



  • Com puc guardar dades d’una forma més estructurada en el propi dispositiu?
  • Què és el format CSV?
  • Quins altres usos puc donar a l'objecte TinyDB?



Els objectes de tipus TinyDB permeten emmagatzemar informació de tipus text indexada mitjançant unes etiquetes que identifiquen cada registre. Per accedir a les dades emmagatzemades disposem d'un seguit de procediments i funcions. Aquestes darreres ens retornaran el resultat immediatament després de la crida.



Creem una petita agenda

En aquest bloc proposem crear una petita agenda en el nostre dispositiu que ens permetrà apuntar tasques que tinguem pendents.

Creem una interfície amb un aspecte com el següent que ens ha de permetre introduir esdeveniments a recordar, consultar-los i esborrar-los:



Per decidir quina operació volem dur a terme, disposarem d'un parell de botons per gravar i esborrar esdeveniments de l'agenda i un ListPicker que ens permetrà seleccionar quin esdeveniment volem consultar.

Per definir un esdeveniment n’hi haurà prou amb introduir els valors als camps de text i seleccionar una hora i una data en els objectes TimePicker i DatePicker que es mostren en els Labels corresponents:



Un cop l’usuari ha omplert tots els camps, emmagatzemem aquesta informació en un sol registre separant cada un dels valors per una coma. Aquesta forma de desar les dades s’anomena CSV.

CSV són les sigles d’un format d’estructuració de dades, Coma Separated Values, que consisteix a separar els camps d’informació d’un registre mitjançant comes i els registres per un retorn de línia, un punt i coma, etc. Aquest format no ha estat documentat formalment i ens podem trobar petites variacions quan descarreguem arxius gravats en aquest format.

El codi que utilitzem per emmagatzemar l’esdeveniment al TinyDB és el que segueix:



Com es veu en el codi anterior, abans de gravar comprovem que:

  • els camps de text continguin informació,
  • els camps de text no continguin comes (utilitzem aquest element com a separador, i
  • no existeixi un esdeveniment a l'agenda amb el títol que volem gravar.

Per poder consultar les tasques gravades n’hi haurà prou amb seleccionar la tasca que ens interessi del ListPicker. Per poder-ho fer, caldrà però que actualitzem el contingut del ListPicker abans d'obrir-lo, amb la llista d’etiquetes existents al TinyDB.



Un cop escollim un element, ens actualitzarà els camps amb la informació sobre la tasca en concret:



Tot i haver gravat les dades en un registre separades per comes, en llegir-les ens ho interpreta com a un camp de text. Per poder-les separar com a diferents camps utilitzem l’operació split que ens retorna els camps de la tasca en format de llista.

Per eliminar una tasca en concret, l’hem de seleccionar del ListPicker i després esborrar-la:



Altres usos de de l'objecte TinyDB

A més a més d’utilitzar l'objecte de tipusTinyDB per emmagatzemar dades de forma permanent en el propi dispositiu, també ens pot servir per transmetre informació entre diferents pantalles dins la pròpia aplicació.

Quan creem variables globals a App Inventor, no son realment globals ja que tan sols es poden utilitzar dins la pantalla en la qual han estat creades. Quan des d’una finestra n’obrim una altra la podem cridar facilitant-li un paràmetre que es podrà capturar en la nova finestra.



En el primer bloc veiem com enviem un valor en cridar una pantalla diferent, i en en el segon veiem com el podem recuperar des de la nova pantalla. Aquest sistema ens permet però recuperar tan sols una sola variable.

Per compartir més dades podem crear un objecte TinyDB a cada finestra i gravar-hi les dades que ens interessi compartir utilitzant els mateixos tags. D’aquesta forma, com que el contingut de tots els TinyDB es grava en un mateix arxiu, si gravem dades usant les mateixes etiquetes, podrem intercanviar informació entre diferents finestres.



En la imatge anterior el primer bloc, Button1.Click, emmagatzema la informació en el TinyDB abans de cridar a una altra finestra i el segon bloc, Screen1.Initialitze, recupera la informació que s’ha desat al TinyDB en la finestra Screen2. El codi que escriurem en l’altra finestra serà el que segueix:

Si esborrem les dades d’un TinyDB o les sobreescribim afectarà a tots els TinyDB d’aquella aplicació.