App_TinyDB, dati persistenti su dispositivi Android

TinyDB, piccolo DataBase. In informatica, il termine database, indica un insieme di archivi collegati fra loro sulla base di un modello logico (relazionale, reticolareeccetera) in modo da consentire la gestione dei dati stessi.
Per gestione viene inteso: inserimento, interrogazione, ricerca, aggiornamento e cancellazione.
Nei database i dati risiedono, in maniera permanente, su di un supporto fisico e non vengono persi allo spegnimento della macchina ospitante.
TinyDB è il componente che, insieme a altri, TextBox, Button, Label eccetera permette la gestione di un database su di uno smartphone o tablet con SO Android. Con TinyDB il salvataggio dei dati avviene come coppia Tag/Value (Titolo/Valore).
Tag è il nome con il quale vengono identificati i dati e Value sono i dati propriamente detti.
I due blocchi che eseguono queste operazioni sono:
  • StoreValue (tag, value), scrive il value (contatto telefonico, frase, punteggio, mappa, sms eccetera) e lo identifica con il Tag (UnaParolaQualsiasi)
  • GetValue (Tag), recupera (legge) i dati identificati dal Tag.
Questi dati vengono poi elaborati da altri componenti nello svolgimento dell’applicazione.
Nello smartphone, i dati vengono salvati nella cartella /data/ in un file UnaParolaQualsiasi.XML.
XML (eXtensible Markup Language), è un linguaggio marcatore basato su un meccanismo sintattico che consente di definire e controllare il significato degli elementi contenuti in un documento.
Si tratta di testo senza formattazione, (senza maiuscolo, grassetto, italico ecc.).
Può essere letto e modificato con i più comuni editor testuali, ad esempio il Blocco Note di Windows.
Il tutto viene eseguito in maniera automatica da App Inventor.
Da ricordare sempre che TinyDB fan distinizione fra lettere maiuscole e minuscole.
Nel seguente esempio viene utilizzato un unico Tag, l’utente scrive in un TextBox i dati che vuole memorizzare.
Questi dati possono poi essere scritti nello smartphone, con un click sul pulsante Memorizza.
Vengono poi riletti al click sul pulsante LeggiDati e inseriti in una label.
Componenti e proprietà da assegnare:
Componente Gruppo Nome

Proprietà

Text Width
Horizz. ScreenArr. HA
Label Basic l TagNome TagNome FillParent
Button Basic b Memorizza Memorizza FillParent
TextBox Basic tbMemorizza Testo da memorizzare(Hint) FillParent
Button Basic bLeggiDati bLeggiDati FillParent
Label Basic lDatiLetti --- FillParent
TinyDB Basic TinyDB
Come dovrebbero presentarsi la pagina Design e l’Emulatore:
Aprire Blocks Editor
Fare click su My Blocks e poi su bMemorizza.
Trascinare il blocco bMemorizza nell’area di lavoro.
Fare click su TinyDB e trascinare il blocco StoreValue sul blocco precedente incastrandolo dentro.
Questo blocco memorizza Tag e Value
Fare click su lTagNome e trascinare il blocco Text sul blocco precedente incastrandolo dentro.
Questo blocco contiene il Tag.
In questo caso il nome del Tag è TagNome, cioè il contenuto del componente lTagNome della finestra Design/Components.

Per recuperare dati inseriti nella presa valueToStore del blocco precedente andrà utilizzato questo nome
Fare click su tbMemorizza, trascinare il blocco Text sul blocco StoreValue incastrandolo dopo la parola valueToStore.

Questo blocco contiene i dati, cioè il contenuto del componente tbMemorizza della finestra Design/Components.
Questi dati sono ora legati al Tag TagNome.

Dopo memorizzato i dati, devono essere cancellati dal display.
Fare click su tbMemorizza e incastrare il blocco Text sotto a al blocco StoreValue
Fare click su lDatiLetti e incastrare il blocco Text sotto al blocco precedente.
Fare click su Built In e poi su Text. Incastrare 2 blocchi Text nei blocchi precedenti dopo la parola to.
Fare click sulle rispettive parole Text e cancellarle.
Il nuovo contenuto dei 2 blocchi è vuoto.
Ora che i dati sono stati memorizzati la tastiera virtuale è ancora sul display e deve essere tolta.
Fare click su Mi Blocks e poi su tbMemorizza. Incastrare il blocco HideKeyboard sotto il blocco Text.

La parte di codice che acquisisce e memorizza i dati è completata.
Ora vengono disposti i blocchi che leggono i dati e li mettono a video.
Fare clcik su My Blocks e poi su bLeggidati.
Trascinare il blocco Click nell’area di lavoro.
Fare click su lDatiLetti e incastrare il blocco Text nel blocco precedente.
Questo blocco riceverà i dati dalla lettura e li mostrerà sul display.
Fare click su TinyDB e incastrare il blocco GetValue sul blocco dopo la parola to.
Questo blocco si occupa della lettura dei dati su comando del blocco successivo e li inserisce nel blocco precedente.
Fare click su lTagNome ed incastrare il blocco Text dopo la parola tag del blocco precedente.
Questi i blocchi assemblati.
Nel primo gruppo, acquisizione e momorizzazione, nel secondo rilettura e messa a video.
  • Prova del programma:

    • Sullo smartphon, senza l’utilizzo dell’Emulatore, dopo l’inserimento dei dati spengere il telefono.
  • Subito dopo, accenderlo di nuovo, i dati inseriti non saranno andati persi e sarà possibile leggerli.
  • Utilizzando solo l’Emulatore, modificare il contenuto dei componenti,
    ad esempio,
    o Nella pagina Design, finestra Properties fare click su lTagNome, verranno mostrate le proprietà del componente lTagNome.
    o Modificare il contenuto della casella text da TagNome in TagNome2 e provare a leggere.
    Non verrà mostrato niente.
    o Adesso, nell’emulatore, memorizzare un nuovo dato, poi fare click su LeggiDati, verrà letto e mostrato.
    o In questo momento, nell’emulatore, sono scritti 2 Tag (TagNome e TagNome2) con 2 rispettivi dati.
    o Per dimostrarlo, nella pagina Design, finestra Properties fare click su lTagNome, verran-no mostrate lo proprietà del componente lTagNome.
    o Modificare il contenuto della casella text da TagNome2 in TagNome e provare a leggere.
    o Verranno mostrati di nuovo i vecchi dati perché non erano andati cancellati.

    In questo esempio minimale, per il Tag, è stata utilizzata una parola ben definita, è possibile possibile uti-lizzare variabili e nomi di liste.
    A loro volta gli Item (voci) di lista possono essere utilizzati, in TinyDB come Tag, ed allo stesso tempo come nomi di nuove liste creando una sorta di database relazionale.