App_TinyWebDB, database sul web

Nelle applicazioni informatiche i database sono una componente molto importante, anche se molte volte l’utente finale nemmeno si accorge di interagire con esso. Avere distribuito un’applicazione collegata a un database permette, aggiornando i dati del database, di tenere aggiornati tutti i dispositivi che utilizzano quella applicazione. Con TinyWebDB è possibile non solo consultare i database, ma anche inserirvi informazioni. Per esempio, un gruppo di utenti sparsi sul territorio, che dispongono della stessa applicazione, potrebbero, ognuno, aggiornare i dati nel database. Informazioni che da quell’istante, sarebbero disponibili a tutti gli altri utenti.
In questa App, viene utilizzato lo spazio http://usfwebservice.appspot.com/ dal titolo:

Non attivo dal marzo 2014. Vedere http://appinvtinywebdb.appspot.com/ e/o http://appinventorapi.com/program-an-api-python/
App Inventor for Android: USF Tiny WebDB Service.
Il servizio web è progettato per funzionare con App Inventor per Android e il componente TinyWebDB.
Il sito è progettato per l'utilizzo di applicazioni in esecuzione sul telefono (tramite richieste JSON).
In questa pagina per mezzo di due link è possibile provare il meccanismo.

  • /storeavalue:
    Stores a value, given a tag and a value è possibile inserire, digitandoli manualmente, Tag e Value
  • /getvalue:
    Retrieves the value stored under a given tag. Returns the empty string if no value is stored.
    Recupera il valore archiviato con un determinato tag.
    Restituisce una stringa vuota se nessun valore è memorizzato.

Questa applicazione mostra l’uso del componente TinyWebDB sia in lettura che in scrittura.
In questa App, per semplificare il più possibile, sono utilizzati un solo Tag ed un solo Value.
Il contenuto di Value contiene un elenco di nomi separati dal carattere |
In un’applicazione più vasta, ognuno di questi nomi potrebbe essere il Tag da utilizzare per memorizzare il Value di ciascun nominativo.

  • Tag = Tabella_Nomi
  • Value = lisa|ugo|paola|lapo|anna|

I dati nello spazio web sono persistenti, ma poiché lo spazio messo a disposizione per i test è limitato e soggetto a sovrascritture, in questa applicazione TinyWebDB è stato inserito un pulsante al cui click vengono memorizzati, a nuovo, i dati di avvio.

Il servizio utilizzato è utile per i test, ma essendo condiviso fra tutti gli utenti di App Inventor, alla fine i dati potranno essere sovrascritti.
Per questa ragione è consigliabile la creazione di un servizio Web personalizzato e non condiviso con altri programmatori o applicazioni App Inventor.
Le indicazioni su come fare, possono essere ricavate dal libro "Usare App Inventor; scrivere e distribuire App per cellulari e tablet Android"

Componenti e proprietà da assegnare:

Componente

Gruppo

Nome

Proprietà

Text

Button

Basic

bScriveTabella_Nomi

ScriveTabella_Nomi

Automatic

Label

Basic

lContenuto_Tabella_Nomi

Contenuto_Tabella_Nomi

Automatic

ListPicker

Basic

lpLeggeTabella_Nomi

lpLeggeTabella_Nomi

Horiz.

ScreenArr.

HA

Fill parent

TextBox

Basic

tbAggiungi_Nome

aggiungi nome(Hint)

Fill parent

Button

Basic

bAggiungi_Nome

Aggiungi_Nome

Fill parent

ListPicker

Basic

lpElimina_Nome

lpElimina_Nome

Automatic

Label

Basic

lNome_Eliminato

Nome_Eliminato

Automatic

Label

Basic

lNomi_DopoEliminazione

Nomi_DopoEliminazione

Automatic

TinyWebDB

Other stuff

TinyWebDB

ServiceURL=http://usfwebservice.appspot.com/
Non attivo dal marzo 2014. Vedere http://appinvtinywebdb.appspot.com/ e/o http://appinventorapi.com/program-an-api-python/

Il ServiceUrl di questo TinyWebDB non è quello predefinito, bensì quello descritto nelle pagine del MIT

Come dovrebbero presentarsi la pagina Design e l’Emulatore:
Aprire Blocks Editor
Viene creata una variabile con nome TabellaNomi, conterrà il Tag con il quale verranno fatte le operazioni di lettura scrittura sul server. Nel blocco Initialize le viene assegnato il valore Tabella_Nomi che è il Tag vero e proprio con il quale lavorerà. Tutto l’App. lavora con il contenuto della variabile TabellaNomi. Lo scopo dell’uso di una variabile è di poter cambiare agevolmente il nome del Tag.
Per utizzare un Tag diverso altro è sufficiente cambiarlo nel blocco text e inizializzare il programma.
Viene creata una nuova variabile che contiene una lista vuota, questa lista conterrà l’elenco dei nomi che verranno letti/scritti sul server Web.
All’avvio nel blocco Screen1.Initialize viene assegnato il valore Tabella_Nomi alla variabile TabellaNomi.
Questo è il Tag con cui verà letto il Value.
Con il blocco TinyWebDB.GetValue viene letto il Value contenuto nella variabile TabellaNomi.
Normalmente verranno trovati i valori scritti in precedenza, ma potrebbero essere diversi o inesistenti perché lo spazio messo a disposizione per i test è soggetto a sovrascritture di altri.
In questo caso utilizzare il pulsante ScriveTabella_Nomi per inizializzare manualmente.
Immediatamente dopo TinyWebDB.GetValue, va in esecuzione TinyWebDB.GotValue ed i blocchi in esso contenuti. Qui ritorna il valore ricevuto in lettura.
Il risultato viene messo a video nella Label lContenuto_Tabella_Nomi.
Viene anche suddiviso in parti ai punti | inserendo le voci risultanti nella lista Elenco_Nomi.
La lista Elenco_Nomi viene poi inserita nei due ListPicker, rispettivamente per lettura ed eliminazione.
TinyWebDB.GotValue sarà sempre in esecuzione dopo ogni aggiunta e cancellazione.
Programmando al suo “do” permette di tenere aggiornati ListiPicker e Label.
Per aggiungere un nuovo nome, esso deve essere scritto nel TextBox tbAggiungi_Nome.
Al click nel TextBox compare la tastiera virtuale ed è possibile digitarlo. Il carattere vietato è | perche il sistema lo scambierebbe per divisorio fra nomi. Una volta terminato di scrivere fare click sul pulsante
Aggiungi_Nome. Andranno in esecuzione i blocchi che eseguono la scrittura sul server web ed aggiornano i componenti. I blocchi sono assemblati in due gruppi.
  1. Pulsante bAggiungi_Nome al cui click viene lanciata l’azione.
     a. Chiama poi la Procedura Aggiunge_Nome che esegue materialmente l’aggiunta.
     b. Ritorno dalla procedura, rilegge i dati appena inseriti perché nel blocco GotValue vengano aggiornati i componenti. (ListPicker e Label).
  2. Procedura Aggiunge_Nome, qui viene materialmente scritto il nuovo valore.
     a. StoreValue al cui Tag viene inserito il Value.
     b. Value viene composto in make text con il Value esistente (la lista dei nomi) a cui vengono aggiunti, il contenuto del TextBox tbAggiungi_Nome e | (divisorio fra nomi).
     c. Viene vuotato il TextBox tbAggiungi_Nome
     d. Nascosta la tastiera virtuale.
Eliminare un nome è simile ad aggiungerlo, quello cha cambia è l’elaborazione del Value, cioè della stringa di testo che contiene la lista dei nomi.
Il nome da cancellare viene fatto scegliere dalla lista del ListPicker lpElimina_Nome, con questo metodo vengono evitati errori di battitura.
I blocchi sono assemblati in due gruppi.
  1. ListPicker lpElimina_Nome al cui evento AfterPicking viene lanciata l’azione.
     a. Chiama la Procedura Elimina_Nome che esegue materialmente la cancellazione.
     b. Ritorno da procedura, vengono riletti i dati appena inseriti perché nel blocco GotValue vengano aggiornati i componenti. (ListPicker e Label)
  2. Procedura Elimina_Nome, esegue materialmente la cancellazione.
Il blocco lpElimina_Nome.Selection contiene il nome da eliminare scelto in ListPicking.
     a. Il nome viene messo a video nella Label lNome_Eliminato.Text
     b. Con replace all viene eliminato da lContenuto_Tabella_Nomi.Text il nome selezionato nel ListPicker lpElimina_Nome.Selection più | che è il divisorio fra nomi.
Tutto è copiato in Nomi_DopoEliminazione.Text inserendo così il risultato a video.
     c. Con TinyWebDB.StoreValue viene scritto il nuovo Value.
Con un click sul pulsante bScriveTabella_Nomi è possibile rigenerare il database ai valori di default.
In questa App d'esempio è stato utilizzato un servizio condiviso fra tutti gli utenti di App Inventor, alla fine i dati potranno essere sovrascritti.
Per la scrittura e successiva distribuzione di proprie App è necassario un servizio Web non condiviso con altri programmatori.
Il database potrà essere testato anche in locale ed una applicazione Payton d'esempio rende tutto molto semplice e trasparente.
Le indicazioni su come fare, possono essere ricavate dal libro "Usare App Inventor; scrivere e distribuire App per cellulari e tablet Android".