Les Fusion Tables com a base de dades. Extret de mSchools
En aquest apartat trobarem com crear un document del tipus Fusion Tables des del nostre Drive de Google que posteriorment utilitzarem des d'App Inventor.
Més concretament es pretén donar resposta a les preguntes següents:
Com crear una Fusion Table?
Quins tipus de camps accepta?
Com podem introduir informació i veure-la posteriorment?
D'entre les diferents opcions d'accés a dades que ens ofereix l'App Inventor, les Fusion Tables són les més versàtils i fàcils d'utilitzar. Un dels motius principals és que hi podem accedir també des del Drive de Google.
Per crear una Fusion Table només ens cal anar al Drive i crear-la com qualsevol altre tipus de document més:
En cas que no ens aparegui aquesta possibilitat el que hem de fer és anar a l'opció Connecta més aplicacions i triar-la de la llista d'opcions:
Pot donar-se el cas que, malgrat haver fet aquesta connexió, la creació d'una nova Fusion Table no funcioni correctament. És una errada detectada i informada per Google que se soluciona creant la nostra primera Fusion Table des d'aquest enllaç
Per crear la nostra primera Fusion Table li hem de dir que volem crear un taula buida (Create empty table):
Un cop fet això ens apareixerà una proposta de taula amb quatre camps. Per configurar la taula amb els camps que nosaltres necessitem anem a Edit → Change columns i trobarem que els quatre camps que hi ha corresponen als quatre tipus de dades que les Fusion Tables poden emmagatzemar:
Text. Li podem modificar el format per tal que hi pugui haver un enllaç a una pàgina web, un enllaç a una imatge o un enllaç a altres tipus de continguts
Number. Admet diferents formats de nombres tal com podríem fer amb un full de càlcul
Location. Podem posar-hi una adreça o el podem configurar per tal que faci referència a dos camps de la nostra taula que continguin la Latitud i la Longitud
Date/time. Podem triar el format amb què volem aquest camp
A més a més en tots ells, excepte en els camps de tipus Location podem incloure-hi una validació de les dades de manera que es pugui triar des d'una llista desplegable.
A continuació hi ha un exemple d'una taula amb quatre camps:
Nom. Un camp de tipus Text
DataNaixement. Un camp de tipus Date/time
Adreça. Un camp de tipus Location
Etapa. Un camp de tipus Text amb validació de dades on només es poden introduir els valors Infantil, Primària o Secundària
Foto. Un camp de tipus Text amb format Four line image on hi posem la URL d'una imatge i ens la mostra amb una mida que ocupa l'equivalent a quatre línies de text
En aquesta taula hi ha quatre registres, que podem veure en format llista, en format fitxes o, com que hi ha localitzacions, en format mapa:
Compartim
Les Fusion Tables les podem compartir de forma similar als altres documents del Drive de Google, de manera que podem donar permisos d'edició o de visualització a persones concretes.
Si tenim intenció de donar permisos d'edició a molta gent, la forma més fàcil és crear un grup de Google i assignar-li els permisos utilitzant l'adreça de correu del grup.
Cal que tinguem en compte que no hi ha manera de donar permisos d'edició d'una Fusion Table de forma pública a internet. Els permisos públics són només de lectura.
En aquest apartat veurem com hem de configurar una Fusion Table per tal de poder-hi accedir des d'App Inventor.
Més concretament es pretén donar resposta a les preguntes següents:
Què és l'API Key i com podem crear-la?
Com funciona la consola d'APIs de Google?
Des d'App Inventor podem utilitzar el componenent FusiontablesControl per tal d'accedir a una Fusion Table i utiltzar-la com a base de dades. Quan ho fem ens demana un paràmetre que és l'API Key.
L'API Key és el codi que ens identificarà de forma unívoca la Fusion Table a la que volem accedir
Per obtenir aquesta informació hem de seguir aquestes instruccions:
Hem d'anar a la Consola d'APIs de Google i validar-nos amb el nostre usuari d'XTEC en cas que no ho estem.
En el menú de l'esquerra, hem de desplegar la categoria APIS & AUTH i triar l'opció APIs.
A la llista d'APIs que trobarem, hem d'anar baixant fins trobar la Fusion Tables API i canviar el seu valor a ON. Si ja està així, no ho hem de modificar.
Tornem al menú de l'esquerra i seleccionem l'opció Credentials dins de la categoria APIS & AUTH.
Trobarem la nostra API Key a Public API Access. Si no veiem cap API key, hem de fer clic al botó Create New Key i triar l'opció "Android Key".
Ens apareixerà un nova pantalla on sembla que ens demana alguna cosa sobre SHA keys. Fem cas omís i fem clic al botó Create button.
Ens apareixerà la nostra API Key sota el títol Key for Android applications.
En aquest apartat trobarem com ho hem de fer per accedir a una Fusion Table des d'App Inventor, així com per mostrar les dades obtingudes.
Més concretament es pretén donar resposta a les preguntes següents:
Com podem veure el contingut de la Fusion Table des d'App Inventor?
Com podem fer consultes?
Com podem utilitzar la informació que hi ha a la Fusion Table?
Per accedir a una Fusion Table necessitem l'API Key que ens permetrà l'accés a les Fusion Tables que tinguem, i que ja hem vist a l'apartat anterior com obtenir-la. Hem de tenir també l'identificador de la Fusion Table en concret a la que volem accedir. Per obtenir aquesta informació, des de la Fusion Table hem d'anar al menú File i triar l'opció About this table. Obtindrem una pantalla com la següent, d'on hem de copiar l'Id:
Quan tenim aquestes dues dades, el més pràctic és definir dues constants a App Inventor per fer-hi referència sempre que les necessitem. A més a més farem que, en carregar-se la pantalla, es defineixi per defecte quina és l'API Key que volem utilitzar per a les nostres Fusion Tables:
Disseny de la pantalla
Què farem ara? Farem una consulta a la Fusion Table amb una sentència SQL, com a una base de dades, de manera que ens mostri un llistat de tots els registres que acompleixin la condició que haguem definit, en triarem un i ens l'ensenyarà en una fitxa. El disseny de la pantalla a App Inventor serà la següent:
És important que posem un nom suficientment clar a cadascun dels elements que farem servir des de l'entorn de programació. En aquest cas tots els TextBox tenen un nom que comença per "Text" i tots els Button tenen un nom que comença per "Boto".
Consulta de la base de dades
A la part superior de la pantalla ens demana l'etapa. Haurem de construir una sentència SQL de forma dinàmica en funció del contingut d'aquest TextBox i fer la consulta a la nostra Fusion Table. Això ho farem de la següent forma:
Quan construïm aquesta sentència SQL és especialment important que anem amb compte a deixar els espais en blanc necessaris per tal de separar els termes de forma adequada. Així doncs, després del FROM i abans del WHERE hi haurà d'haver un espai:
L'execució d'aquesta consulta ens retornarà un llistat amb totes les persones que estan a l'etapa seleccionada. Aquest llistat està en format CSV. Per treballar amb aquest llistat des d'App Inventor el més fàcil és convertir-lo en llistes, de manera que obtinguem una llista de llistes, on la primera correspondrà als noms dels camps i cadascuna de les altres correspondrà a un registre. Si esborrem aleshores la primera llista, la que correspon als noms dels camps, ens quedaran només els registres resultat de la consulta:
Com que volem poder seleccionar un registre, els afegirem tots a un ListPicker. Ara bé, en lloc d'afegir tots els camps, visualitzarem només el nom i l'etapa, que corresponen als camps 1 i 4. Això ho farem creant una llista buida en el ListPicker i, per a cadascun dels registres, hi afegirem el contingut dels camps seleccionats. Finalment obrirem el ListPicker per poder triar la persona que vulguem.
Val a dir que si mirem el disseny de la pantalla no trobarem cap ListPicker, però si ens fixem bé en el llistat de components allà si que n'hi ha un. Hem dissenyat l'app de manera que no hi ha cap necessitat d'accedir al ListPicker manualment, per la qual cosa l'hem definit com un component ocult. Això ho hem fet establint com a hidden la seva propietat Visible.
Visualització de la informació
Un cop hem triat la persona que volíem del llistat, el que hem de fer ara és mostrar tota la seva informació en els camps corresponents. Això ho fem agafant el SelectionIndex del ListPicker i utilitzant-lo en la llista on tenim tots els registres.
La visualització de l'aplicació en un dispositiu mòbil quedaria de la següent forma:
Finalment, i com que tenim l'adreça, hem afegit un botó en el disseny de la pantalla per situar en un mapa de Google aquesta adreça. Això ho fem de la següent manera: