COMPONENTI ARCHIVIAZIONE (Storage Components)

Diversi sono i metodi di memorizzazione in un’app:

  • quando viene salvato un valore provvisoriamente (ad esempio, quando la scelta GET di una ListPicker  viene scritta nella proprietà testo di una Label);

  • all’interno di un Evento. Ad esempio nell’evento Afterchoosing del Notifier la variabile Choose è utilizzabile solo nel proprio blocco;

  • creando una variabile e assegnandogli un valore.
Purtroppo, questi metodi non sono persistenti e al riavvio dell’app, i dati saranno spariti. A nostro soccorso arrivano i componenti di archivazione che salvano permanentemente nel dispositivo. NB: nel gergo informatico la sigla DB sta per DataBase, cioè base di dati.
  1. Data File
  2. File
  3. Tiny DB
  4. Tiny Web DB
  5. Cloud DB
  6. Firebase

Mentre File e TinyDB archiviano i dati solo sul dispositivo che esegue l’app, un componente che si poggia sul web (Tiny Web DB, CloudD o Firebase) è condiviso tra gli utenti che eseguono la stessa app (quindi su più dispositivi), perché archivia i dati online. L’accesso ai dati web è asincrono, il che significa che l’archiviazione e il recupero dei dati potrebbero non avvenire immediatamente.

Annotazione importante sul Componente Firebase

In AI2 il componente FirebaseDB del gruppo Sperimentale, dal gennaio del 2021 non verrà più supportato da Google per AppInventor della MIT (ispiratrice e sovvenzionatrice del progetto APP INVENTOR).
Precisazione: Firebase viene utilizzato ugualmente con soddisfazione da migliaia di utenti, ma evidentemente la Google non vuole più spendere risorse per seguire il componente su AI2. CloudDB è basato su FirebaseDB con tutti gli stessi blocchi ma è ospitato sui server della MIT.
Quindi, nel momento in cui scriviamo (Dicembre 2020 n.d.r.) solo tre componenti di archiviazione App Inventor 2, hanno il beneplacito della Google: CloudDb, File e TinyDB. (Siccome TinyWeDB viene utilizzato su un server pubblico della MIT, è stato scartato da questo elenco perchè non soddisfa nessun metodo di sicurezza e viene utilizzato solo a scopo scolastico).

Leggi le differenze tra FirebaseDB e CloudDB.

Differenze
Se KODU, oltre a File, TinyDB e TinyWeDB ha altri tre componenti Cloudinary, Foglio elettronico e SQLite, THUNX ne esce fuori come un campione assoluto, avendo la possibilità di collegamento con piattaforme del calibro di Firebase, Airtable, WEB API e Oasis.
 

Sistema di archiviazione Android

All’articolo Nozioni di base sul sistema di archiviazione Android , trovate una dettagliata spiegazioni delle Directory e dei relativi percorsi nei dispositivi Android (nuovi e vecchi).

Consiglio di leggerlo prima di addentrarvi nella spiegazione dei singoli componenti.

Contenuti:

Contenuti KODU:

  • Cloudinary
  • File
  • Spreadsheet
  • SQLite

Contenuti THUNX:

  • Local Storage
  • Local DB
  • Realtime DB by Firebase
  • Airtable
  • Webflow
  • Google sheet
  • Web API
  • Media DB by Cloudinary
  • Smart Contract by Oasis
  • Blockchain Wallet by Oasis
App Inventor 2 Kodular ThunkableX
 
Fig.: Le tre liste dei componenti

CloudDB

Il CloudDB è un componente non visibile che consente di archiviare i dati (di tipo Testo e Immagini .JPG e .PNG) su un server di database connesso a Internet (utilizzando il software Redis). Ciò consente agli utenti della tua app di condividere i dati tra loro. Per impostazione predefinita, i dati verranno archiviati in un server gestito dal MIT, tuttavia è possibile configurare ed eseguire il proprio server. Impostare la proprietà RedisServer e la proprietà RedisPort per accedere al proprio server. Se vuoi ospitare un DB Redis sul tuo server leggi qui.

Proprietà

ProjectID

text read-only Ottiene il ProjectID per questo progetto CloudDB.

RedisPort

number  read-only La porta del server Redis da usare. Il valore predefinito è 6381

RedisServer

text read-only Il server Redis da utilizzare per archiviare i dati. Un’impostazione di “DEFAULT” indica che verrà utilizzato il server MIT.

Gettone Token

text designer-only Questo campo contiene il token di autenticazione utilizzato per accedere al server Redis supportato. Per il server “DEFAULT”, non modificare questo valore, il sistema lo riempirà per te. Un amministratore di sistema può anche fornire un valore speciale all’utente che può essere utilizzato per condividere dati tra più progetti di più persone. Se si utilizza il proprio server Redis, impostare una password nella configurazione del server e inserirla qui.

UseSSL

boolean designer-only Impostare su true per utilizzare SSL per comunicare con il server CloudDB / Redis. Questo dovrebbe essere impostato su True per il server “DEFAULT”.

Eventi

CloudDBError ( text message)

Indica che si è verificato un errore durante la comunicazione con il server Redis CloudDB.

DataChanged ( text tag , any value)

Indica che i dati nel progetto CloudDB sono cambiati. Lancia un evento con quel tag che è stato aggiornato e value che ora ha.

FirstRemoved ( any value)

Evento attivato dalla Funzione RemoveFirstFromList. L’argomento value è l’oggetto che è stato il primo nell’elenco e che ora è stato rimosso.

GotValue ( text tag , any value)

Indica che una richiesta GetValue è riuscita.

TagList ( valore )

Evento attivato quando abbiamo ricevuto l’elenco di tag noti. Esegui in risposta a una chiamata alla funzione GetTagList.

Metodi

AppendValueToList ( text tag,any itemToAdd )

Aggiungi atomicamente un valore alla fine di un elenco. Se due dispositivi utilizzano questa funzione contemporaneamente, entrambi verranno aggiunti e non verranno persi dati.

ClearTag ( text tag )

Rimuovi il tag da CloudDB.

CloudConnected ()

Restituisce true se siamo in rete e probabilmente saremo in grado di connetterci al server CloudDB.

GetTagList ()

Chiede al CloudDB di recuperare tutti i tag appartenenti a questo progetto. L’elenco risultante viene restituito nell’evento TagList.

GetValue ( text tag, any value valueIfTagNotThere )

GetValue chiede al CloudDB di ottenere il valore memorizzato sotto il tag specificato. Passerà il risultato al dato GotValue.

RemoveFirstFromList ( text tag )

Ottieni il primo elemento di un elenco e rimuovilo atomicamente. Se due dispositivi utilizzano questa funzione contemporaneamente, uno otterrà il primo elemento e l’altro otterrà il secondo elemento, oppure un errore se non è disponibile alcun elemento. Quando l’elemento è disponibile, l’evento FirstRemoved verrà attivato.

StoreValue ( text tag , anyvalue valueToStore )

Chiede al CloudDB di conservare il dato value sotto il dato tag.

Data File

Componente per DataFile

Proprietà

Nomecolonnalist read-only, blocks-only

Recupera i nomi delle colonne del file di origine attualmente caricato. Per i file CSV, questo restituirà un elenco di voci nella prima riga. Per i file JSON, questo restituirà un elenco di chiavi nell’oggetto JSON.

Colonnelist read-only, blocks-only

Recupera un elenco di colonne del file di origine attualmente caricato.

DefaultScopescope write-only, designer-only

Specifica l’ambito predefinito per i file a cui si accede utilizzando il componente File. L’ambito dell’app dovrebbe funzionare per la maggior parte delle app. La modalità legacy può essere usata per le app che precedono i vincoli più recenti in Android sull’accesso ai file dell’app.

Righelist read-only, blocks-only

Recupera un elenco di righe del file di origine attualmente caricato.

File sorgentetext write-only, designer-only

Imposta il file di origine da cui analizzare i dati, quindi analizza il file in modo asincrono. I risultati vengono archiviati nelle proprietà Columns, Rows e ColumnNames. La formattazione prevista del file è il formato CSV o JSON.

Eventi

Nessuno

Metodi

LeggiFiletext(NomeFile)

Indica il file di origine da cui caricare i dati. Il formato previsto del contenuto del file è CSV o JSON. Prefissare il filename con / per leggere da un file specifico sulla scheda SD (ad esempio, /myFile.txt leggerà il file /sdcard/myFile.txt). Per leggere le risorse impacchettate con un’applicazione (funziona anche per Companion) avvia il filenamecon // (due barre). Se un filename non inizia con una barra, verrà letto dalla memoria privata dell’applicazione (per le app in pacchetto) e da /sdcard/AppInventor/data per il Companion.

File

Componente non visibile per l’archiviazione e il recupero di file. Utilizzare questo componente per scrivere o leggere file sul dispositivo. Il comportamento predefinito è scrivere i file nella directory dei dati privati ​​associata all’app. Companion scrive i file in /sdcard/AppInventor/data per semplificare il debug. Se il percorso del file inizia con una barra ( /), il file viene creato in relazione a /sdcard. Ad esempio, scrivendo un file in /myFile.txt cui scriveremo il file /sdcard/myFile.txt.

Componente non visibile per l’archiviazione e il recupero di file. Utilizzare questo componente per scrivere o leggere file sul dispositivo.

La posizione esatta in cui vengono inseriti i file esterni è una funzione del valore della proprietà Scope, se l’app è in esecuzione nel Companion o è compilata e su quale versione di Android è in esecuzione l’app.

NB: Scope in italiano può essere tradotto come SCOPO ma anche, e questo è il caso, in AMBITO, PORTATA. In programmazione è molto conosciuta la proprietà scope of variables, si riferisce alla visibilità e alla durata delle variabili. In altre parole, quali parti del tuo programma possono vederlo o usarlo. Normalmente sono riconosciute come LOCALI o GLOBALI.

Poiché le versioni più recenti di Android richiedono che i file vengano archiviati in directory specifiche dell’app, DefaultScope è impostato su App. Se stai utilizzando una versione precedente di Android e hai bisogno di accedere all’archivio pubblico legacy, modifica la proprietà DefaultScope in Legacy. Puoi anche cambiare l’ambito usando i blocchi.

Di seguito descriviamo brevemente ciascun tipo di ambito: (Per capire le versioni di Android, leggi la pagina Differenza tra versioni Android e API)

  • App: i file verranno letti e scritti nella memoria specifica dell’app su Android 2.2 e versioni successive. Nelle versioni precedenti di Android, i file verranno scritti nell’archivio legacy.
  • Asset (Risorsa hardware): i file verranno letti dalle risorse dell’app. È un errore tentare di scrivere sugli asset dell’app poiché sono contenuti nell’archiviazione di sola lettura.
  • Cache: i file verranno letti e scritti nella directory della cache dell’app. La cache è utile per i file temporanei che possono essere ricreati in quanto consente all’utente di cancellare i file temporanei per recuperare spazio di archiviazione.
  • Legacy (Obsoleto): i file verranno letti e scritti nel file system utilizzando le regole di App Inventor prima del rilascio nb187. Cioè, i nomi di file che iniziano con un singolo / verranno letti e scritti nella radice della directory di archiviazione esterna, ad esempio /sdcard/. La funzionalità legacy non funzionerà su Android 11 o versioni successive.
  • Private (Privato): i file verranno letti e scritti nella directory privata dell’app. Usa questo ambito per archiviare informazioni che non dovrebbero essere visibili ad altre applicazioni, come le app di gestione dei file.
  • Shared (Condiviso): i file verranno letti e scritti nelle directory multimediali condivise del dispositivo, ad esempio Immagini.

All’articolo Nozioni di base sul sistema di archiviazione Android troverai le Directory e i percorsi dei diversi ambiti.

Nota 1: in modalità Legacy, i nomi dei file possono assumere una delle tre forme seguenti:

  • I file privati ​​non hanno iniziali / e vengono scritti nell’archivio privato dell’app (ad es. ‘file.txt’)
  • I file esterni hanno una singola / iniziale e vengono scritti nella memoria pubblica (ad es. ‘/file.txt’)
  • Le risorse dell’app in bundle hanno due // iniziali e possono essere solo lette (ad es. ‘//file.txt’)

Nota 2: in tutti gli ambiti, un nome di file che inizia con due barre (//) verrà interpretato come un nome di risorsa.

Proprietà

DefaultScope scope write-only, designer-only

Specifica l’ambito predefinito per i file a cui si accede utilizzando il componente File. L’ambito dell’app dovrebbe funzionare per la maggior parte delle app. La modalità legacy può essere utilizzata per le app che precedono i nuovi vincoli in Android (del 2021) sull’accesso ai file dell’app.

ReadPermissionboolean write-only, designer-only

Una proprietà solo per la finestra di progettazione (Designer) che può essere usata per abilitare l’accesso in lettura all’archiviazione di file al di fuori delle directory specifiche dell’app.

Scope scope blocks-only

Indica l’ambito corrente per operazioni come ReadFrom e SaveFile.

WritePermissionboolean write-only, designer-only

Una proprietà solo designer che può essere usata per abilitare l’accesso in scrittura all’archiviazione di file al di fuori delle directory specifiche dell’app.

Eventi

AfterFileSaved ( text fileName )

Evento che indica che il contenuto del file è stato scritto.

GotText ( text text )

Evento che indica che i contenuti del file sono stati letti.

Metodi

AppendToFile ( text text , text fileName )

Aggiunge il testo alla fine di un file. Crea il file se non esiste già. Per informazioni, vedi il metodo SaveFile, su dove sono scritti i file. In caso di successo, l’evento AfterFileSaved si attuerà.

CopyFile(fromScope,fromFileName,toScope,toFileName)

Copia il contenuto dal primo file al secondo file.

Delete ( text fileName )

Elimina un file dalla memoria. Anteporre al filename una / per eliminare un file specifico nella scheda SD (ad esempio, /myFile.txt eliminerà il file /sdcard/myFile.txt). Se il filename non inizia con un /, il file che si trova nella memoria privata del programma verrà eliminato. Anteporre al  filename una // è un errore, perché non è possibile eliminare i file delle risorse.

Exists(scope,path)

Verifica se il percorso esiste nell’ambito specificato.

IsDirectory(scope,path)

Verifica se il percorso denominato nell’ambito specificato è una directory.

ListDirectory(scope,directoryName)

Ottieni un elenco di file e directory nella directory data.

MakeDirectory(scope,directoryName)

Crea una nuova directory per l’archiviazione dei file. La semantica di questo metodo è tale che restituirà true se la directory esiste al suo completamento. Ciò può significare che la rubrica esisteva già prima della chiamata.

MakeFullPath(scope,path)

Converte l’ambito e il percorso in una singola stringa per altri componenti.

MoveFile(fromScope,fromFileName,toScope,toFileName)

Sposta un file da una posizione all’altra.

ReadFrom ( text fileName )

Legge il testo da un file in memoria. Anteporre al filename una / per leggere da un file specifico sulla scheda SD (ad esempio, /myFile.txt leggerà il file /sdcard/myFile.txt). Per leggere le risorse impacchettate con un’applicazione (funziona anche per il Companion), iniziare il fileName con // (due barre). Se un filename non inizia con una barra, verrà letto dalla memoria privata dell’applicazione (per le app in pacchetto .apk o Bundle .aab) e da /sdcard/AppInventor/data per il Companion.

RemoveDirectory(scope,directoryName,recursive)

Rimuovere una directory dal file system. Se recursive è True, tutto viene rimosso. Se invece è False, viene rimossa solo la directory e solo se è vuota.

SaveFile ( text text , text fileName )

Salva il testo in un file. Se filename inizia con una barra (/) il file viene scritto sulla sdcard (ad esempio, scrivendo su /myFile.txt scriverà il file /sdcard/myFile.txt). Se fileName non inizia con una barra, verrà scritto nella directory dei dati privati ​​del programma dove non sarà accessibile ad altri programmi sul telefono. Esiste un’eccezione speciale per AI Companion in cui questi file vengono scritti su /sdcard/AppInventor/data per facilitare il debug. Si noti che questo blocco sovrascriverà un file se esiste già. Se si desidera aggiungere contenuto a un file esistente, utilizzare il metodo AppendToFile.

Spreadsheet

 

Il foglio di lavoro è un componente non visibile per l’archiviazione e la ricezione di dati da un documento di Fogli Google () utilizzando l’API di Fogli Google.

Per utilizzare questo componente, devi prima avere un account sviluppatore Google. Quindi, devi creare un nuovo progetto con quell’account sviluppatore Google, abilitare l’API di Fogli Google su quel progetto e infine creare un account di servizio per l’API di Sheets.

Le istruzioni su come creare l’account di servizio, nonché su dove trovare altre informazioni rilevanti per l’utilizzo del componente Fogli Google, sono disponibili qui.

I numeri di riga e colonna sono indicizzati a 1.

Proprietà

Nome dell’applicazione text designer-only

Il nome della tua applicazione, utilizzato quando si effettuano chiamate API.

CredentialsJson text

Il file JSON con le credenziali per l’account di servizio

SpreadsheetID text

L’ID del file di Fogli Google che desideri modificare. Puoi trovare l’ID foglio di lavoro nell’URL del file Fogli Google.

Eventi

ErrorOccurred text(errorMessage)

Attivato ogni volta che una chiamata API rileva un errore. I dettagli sull’errore sono in errorMessage.

FinishedAddCol number(columnNumber)

L’evento di callback per il blocco Metodo AddCol, chiamato dopo che i valori della tabella sono stati aggiornati. Ciò restituisce inoltre il numero di colonna per la nuova colonna.

FinishedAddRow number(rowNumber)

L’evento di callback per il blocco numberAddRow, chiamato dopo che i valori nella tabella sono stati aggiornati. Ciò restituisce inoltre il numero di riga per la nuova riga.

FinishedClearRange()

L’evento di callback per il blocco Metodo ClearRange, chiamato dopo che i valori nella tabella sono stati aggiornati.

FinishedRemoveCol()

L’evento di callback per il blocco Metodo RemoveCol, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedRemoveRow()

L’evento di callback per il blocco Metodo RemoveRow, chiamato dopo che i valori nella tabella sono stati aggiornati.

FinishedWriteCell()

L’evento di callback per il blocco Metodo WriteCell, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedWriteCol()

L’evento di callback per il blocco Metodo WriteCol, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedWriteRange()

L’evento di callback per il blocco Metodo WriteRange, chiamato dopo che i valori della tabella sono stati aggiornati.

FinishedWriteRow()

L’evento di callback per il blocco Metodo WriteRow, chiamato dopo che i valori della tabella sono stati aggiornati.

GotCellData text(cellData)

L’evento di callback per il blocco Metodo ReadCell. cellData è il valore di testo nella cella.

GotColData(list colDataList)

L’evento di callback per il blocco Metodo ReadCol. colDataList è un elenco di valori di cella di testo in ordine di numero di riga crescente.

GotFilterResult(list return_rows,return_data)

L’evento callbeck per il blocco Metodo ReadWithQuery. La risposta è un elenco di righe, in cui ogni riga soddisfa la query.

GotRangeData(list rangeData)

L’evento di callback per il blocco Metodo ReadRange. Il rangeData è un elenco di righe, in cui le dimensioni sono le stesse del rangeReference.

GotRowData(list rowDataList)

L’evento di callback per il blocco Metodo ReadRow. RowDataList è un elenco di valori di cella di testo in ordine crescente di numero di colonna.

GotSheetData(list sheetData)

L’evento di callback per il blocco Metodo ReadSheet. sheetData è un elenco di righe.

Metodi

AddCol(text sheetname,list data)

Dato un elenco di valori come dati, aggiunge i valori alla successiva colonna vuota del foglio. Inizierà sempre dalla riga superiore e continuerà verso il basso. Una volta completato, attiva l’evento di callback FinishedAddCol.

Addrow(text sheetName,list data)

Dato un elenco di valori come dati, aggiunge i valori alla riga vuota successiva del foglio. Inizierà sempre dalla colonna più a sinistra e continuerà a destra. Una volta completato, attiva l’evento di callback FinishedAddRow. Ciò restituisce inoltre il numero di riga per la nuova riga.

ClearRange(text sheetName, text rangeReference)

Svuota le celle nell’intervallo specificato. Una volta completato, questo blocco attiva l’evento di callback FinishedClearRange.

text GetCellReference( numberrow, numbercol)

Converte la rappresentazione intera di righe e colonne in notazione A1 utilizzata in Fogli Google per una singola cella. Ad esempio, la riga 1 e la colonna 2 corrispondono alla stringa ‘B1’.

text GetRangeReference( numberrow1, numbercol1, numberrow2, numbercol2)

Converte la rappresentazione intera di righe e colonne per gli angoli dell’intervallo in notazione A1 utilizzata in Fogli Google. Ad esempio, selezionando l’intervallo dalla riga 1, col 2 alla riga 3, col 4 corrisponde alla stringa “B1:D3”.

ReadCell( textsheetName, textcellReference)

Nella pagina con il sheetName fornito, legge la cella in corrispondenza del dato cellReference e attiva l’evento di callback GotCellData. Il cellReference può essere un blocco di testo con notazione A1 o il risultato del blocco getCellReference.

ReadCol( textsheetName, numbercolNumber)

Nella pagina con il sheetName fornito, legge la colonna in corrispondenza del colNumber specificato e attiva l’evento di callback GotColData.

ReadRange( textsheetName, textrangeReference)

Nella pagina con il sheetName fornito, legge le celle nel rangeReference specificato e attiva l’evento di callback GotRangeData. Il rangeReference può essere un blocco di testo con notazione A1 o il risultato del blocco getRangeReference.

ReadRow( textsheetName, numberRowNumber)

Nella pagina con il sheetName fornito, legge la riga in corrispondenza del rowNumber specificato e attiva l’evento di callback GotRowData.

ReadSheet( textsheetName)

Legge l’intero documento di Fogli Google e attiva l’evento di callback GotSheetData.

ReadWithExactFilter( textsheetName, numbercolID, textvalue)

Filtra un foglio Google per le righe in cui il numero di colonna specificato corrisponde al valore fornito.

ReadWithPartialFilter( textsheetName, numbercolID, textvalue)

Filtra un foglio Google per le righe in cui il numero di colonna specificato contiene la stringa del valore fornita.

RemoveCol( textsheetName, numbercolNumber)

Elimina la colonna con il numero di colonna specificato dalla tabella. Questo non cancella la colonna, ma la rimuove completamente. L’id della griglia del foglio si trova alla fine dell’URL del documento Fogli Google, subito dopo ‘gid=’. Una volta completato, attiva l’evento di callback FinishedRemoveCol.

RemoveRow( textsheetName, numbercolNumber)

Elimina la riga con il numero di riga specificato (indicizzato a 1) dalla tabella. Questo non cancella la riga, ma la rimuove completamente. L’id della griglia del foglio si trova alla fine dell’URL del documento Fogli Google, subito dopo ‘gid=’. Una volta completato, attiva l’evento di callback FinishedRemoveRow.

WriteCell( textsheetName, textCellReference,anydata)

Dato un testo o un numero come dati, scrive il valore nella cella. Sovrascriverà tutti i dati esistenti nella cella con quello fornito. Una volta completato, attiva l’evento di callback FinishedWriteCell.

WriteCol( textsheetName, numbercolNumber,list data)

Dato un elenco di valori come dati, scrive i valori nella colonna con il numero di colonna specificato, sovrascrivendo i valori esistenti dall’alto verso il basso. (Nota: non cancellerà l’intera colonna.) Una volta completato, attiva l’evento di callback FinishedWriteCol.

WriteRange( textsheetName, textRangeReference,list data)

Dato l’elenco di elenchi come dati, scrive i valori nelle celle nell’intervallo. Il numero di righe e colonne nell’intervallo deve corrispondere alle dimensioni dei dati. Questo metodo sovrascriverà i dati esistenti nell’intervallo. Una volta completato, attiva l’evento di callback FinishedWriteRange.

WriteRow( textsheetName, numberRowNumber, listdata)

Dato un elenco di valori come dati, scrive i valori nella riga con il numero di riga specificato, sovrascrivendo i valori esistenti da sinistra a destra. (Nota: non cancellerà l’intera riga.) Una volta completato, attiva l’evento di callback FinishedWriteRow.

TinyDB

TinyDB è un componente non visibile che archivia dati di tipo testo e immagine.
Le app create con App Inventor vengono inizializzate ogni volta che vengono eseguite. Ciò significa che se un’app imposta il valore di una variabile e l’utente quindi esce dall’app, il valore di quella variabile non verrà ricordato alla successiva esecuzione dell’app.
Al contrario, TinyDB è un archivio di dati persistente. I dati memorizzati in a TinyDB saranno disponibili ogni volta che l’app viene eseguita. Un esempio potrebbe essere un gioco che salva il punteggio più alto e lo recupera ogni volta che si gioca.
Gli elementi di dati sono costituiti da tag e valori. Per memorizzare un elemento dati, è necessario specificare il tag in cui deve essere archiviato. Il tag deve essere un blocco di testo, che dà un nome ai dati. Successivamente, è possibile recuperare i dati archiviati in un determinato tag.
Non è possibile utilizzare il TinyDB per trasferire i dati tra due diverse app sul telefono, anche se è possibile utilizzare il TinyDB per condividere i dati tra le diverse schermate di un’app multi-schermo.
Quando si sviluppano app utilizzando AI Companion, tutte le app che utilizzano tale Companion condivideranno le stesse TinyDB. Tale condivisione scompare una volta che le app sono state impacchettate e installate sul telefono. Durante lo sviluppo, dovresti fare attenzione a cancellare i dati dell’ app Companion ogni volta che inizi a lavorare su una nuova app.

Proprietà

Spazio dei nomi

text Spazio dei nomi per l’archiviazione dei dati.

Eventi

Nessuno

Metodi

Cancella tutto()

Cancella l’intero archivio dati.

ClearTag ( text tag )

Cancella la voce con il dato tag.

any GetTags ()

Restituisce un elenco di tutti i tag nell’archivio dati.

any GetValue (text tag ,any valueIfTagNotThere )

Recupera il valore memorizzato sotto il dato  tag. Se non è presente tale tag, quindi tornare valueIfTagNotThere.

StoreValue ( text tag , any valueToStore )

Archivia il dato valueToStore sotto il dato tag. La memoria persiste sul telefono al riavvio dell’app.

TinyWebDB

Fig: Come funziona la trasmissione coi componenti web

Il componente TinyWebDB comunica con un servizio Web per archiviare e recuperare informazioni di tipo testuale. Sebbene questo componente sia utilizzabile, è molto limitato e inteso principalmente come dimostrazione per le persone che desiderano creare i propri componenti che parlano al Web. Il servizio Web è disponibile all’indirizzo (http://tinywebdb.appinventor.mit.edu). Il componente ha metodi per archiviare un valore sotto un tag e per recuperare il valore associato al tag. L’interpretazione del significato di “archivio” e “recupero” dipende dal servizio Web.

In questa implementazione, tutti i tag e i valori sono stringhe di testo. Questa restrizione potrebbe essere attenuata nelle versioni future.

Proprietà

ServiceURL

text Specifica l’URL del servizio Web. Il valore predefinito è il servizio demo in esecuzione su App Engine.

Eventi

GotValue ( text tagFromWebDB ,any valueFromWebDB )

Indica che una richiesta GetValue del server ha avuto esito positivo.

ValueStored ()

Evento che indica che una richiesta StoreValue del server è riuscita.

WebServiceError ( text messaggio )

Indica che la comunicazione con il servizio Web ha segnalato un errore.

Metodi

GetValue ( text tag)

GetValue chiede al servizio Web di ottenere il valore archiviato sotto il dato tag. Spetta al servizio Web cosa restituire se non esiste alcun valore memorizzato in tag. Questo componente accetta solo tutto ciò che viene restituito. L’evento GotValue verrà eseguito al completamento.

StoreValue ( text tag , any valueToStore )

Invia una richiesta al servizio Web per archiviare il dato valueToStore sotto il dato tag. L’evento ValueStored verrà eseguito al completamento.

Contenuti KODU:

Cloudinaryhttps://cloudinary.com è un sito che ci mette a disposizione 10MB per i nostri database. La multimedialità è il loro forte, infatti Coudinary semplifica la gestione dei media e migliora l’esperienza utente fornendo automaticamente immagini e video, migliorati e ottimizzati per ciascun utente. Consigliamo di creare un account specifico per questo servizio.

File Componente non visibile per la memorizzazione e il recupero dei file. Usa questo componente per scrivere o leggere file sul tuo dispositivo. Il comportamento predefinito è scrivere file nella directory dei dati privati associata alla tua app. Il Companion è un caso speciale per scrivere file in /sdcard/Makeroid/data per facilitare il debug. Se il percorso del file inizia con una barra (/), il file viene creato rispetto a /sdcard. Ad esempio, scrivere un file in /myFile.txt scriverà il file in /sdcard/myFile.txt.
Nel componente File di KODULAR sono anche compresi blocchi Eventi e Metodi per zippare e unzippare un file.

Fusiontables Control Servizio interrotto nel 2019. Alternative altrettanto utili, tra cui BigQuery, Cloud SQL, Maps Platform e Data Studio“.

Spreadsheet Un componente non visibile che fornisce l’accesso alla memoria del foglio di calcolo Airtable. https://airtable.com/ è il sito che ci permette di salvare dati nei loro server in maniera privata (bisogna entrare nel proprio account con una propria password). A questo link https://www.youtube.com/watch?v=2fVRne8drfQ&feature=emb_logo potete vedere tutte le caratteristiche e le fasi d’inserimento.

SQLite Un componente non visibile che accede al database SQLite dell’applicazione. Qui il link alla pagina italiana di wikipedia.

Contenuti THUNX:

Local Storage Come metodo di utilizzo e come blocchi , ricorda molto il TinyDB.

Local DB Molte app richiedono una semplice tabella di dati per eseguire una serie di attività essenziali. Un modo per aggiungere questi dati è tramite un DB locale (Local DB). È simile al TinyDB ma con un’interfaccia sicuramente più easy:

Realtime DB by Firebase Questa opzione di archiviazione è utile per qualsiasi cosa, dal salvataggio dei punteggi più alti del gioco al monitoraggio del credito di lavoro, fornito da Firebase. Bisogna crearsi un account Firebase e così si ha diritto a dello spazio privato sui server Google.

Airtable: https://airtable.com/ è il sito che ci permette di salvare dati nei loro server in maniera privata (bisogna entrare nel proprio account con una propria password). A questo link https://www.youtube.com/watch?v=2fVRne8drfQ&feature=emb_logo  potete vedere tutte le caratteristiche e le fasi d’inserimento. (qui le istruzioni complete)

Media DB by Cloudinaryhttps://cloudinary.com  un altro sito che ci mette a disposizione 10MB per i nostri database. La multimedialità è il loro forte, infatti Coudinary semplifica la gestione dei media e migliora l’esperienza utente fornendo automaticamente immagini e video, migliorati e ottimizzati per ciascun utente. Consigliamo di creare un account specifico per questo servizio.

Webflow : https://webflow.com/ Puoi collegare il tuo progetto Thunkable a un sito Webflow. Un sito si basa su una serie di raccolte (collections). Ogni collezione è un gruppo di elementi (items).
Quando colleghi il tuo sito Webflow al tuo progetto Thunkable, puoi scegliere una raccolta da questo sito nello stesso modo in cui puoi scegliere una tabella da un’origine dati locale.
Per iniziare, accedi a Impostazioni progetto dal dashboard o dal Designer di Webflow, fai clic sulla scheda Integrazioni e Genera una chiave API. Incolla questo token in Thunkable e fai clic sul pulsante Aggiorna per vedere il tuo sito Webflow elencato.Scegli il sito che desideri utilizzare come origine dati e fai clic su Crea.

Ora hai accesso alle raccolte e ai relativi elementi del sito Webflow selezionato. (qui le istruzioni complete)

GOOGLE SHEET: https://docs.thunkable.com/data-sources#google-sheets In Fogli di Google, l’intero documento è considerato l’origine dati. Per utilizzare un foglio Google come origine dati, la prima riga del foglio deve essere una riga di intestazione.
Il tuo foglio Google deve essere condivisibile per Thunkable per accedere ai suoi dati.
Per collegare un foglio Google, accedi e concedi al tuo progetto Thunkable l’autorizzazione ad accedere al tuo Google Drive. (qui le istruzioni complete)

Web API Una quantità di dati sono una parte essenziale di molte app create oggi e il componente API Web consente alle app di recuperare i dati da qualsiasi servizio API (interfaccia di programmazione dell’applicazione) pubblico o privato sul Web. Per gli sviluppatori più avanzati che hanno accesso in scrittura a un’API privata, questo componente consente anche di caricare ed eliminare i dati. Per vedere quali API pubbliche sono disponibili, consigliamo questo elenco di Todd Motto .

Smart Contract by Oasis Blockchain Wallet by Oasis

Come è solito per i tecnici che aggiornano la documentazione, questi due componenti introdotti nel 2019 sono spariti dalla guida di THUNKABLEX. Ugualmente lascio i link esterni .

Oasis Labs www.oasislabs.com offre una piattaforma di cloud computing su blockchain costruita per privacy, sicurezza e prestazioni superiori. La Blockchain, viene intesa come database trasparente al quale tutti gli utenti possono partecipare a patto che, gli stessi, decidano di condividere con gli altri le proprie conoscenze e risorse informatiche (condivisione delle risorse hardware e dei dati), affinché la stessa catena possa funzionare in modo migliore, offrendo quindi dei vantaggi a tutti gli altri utenti e ottenendone come conseguenza dell’impegno messo a disposizione da parte dei membri che fanno parte della stessa catena.

Aggiornato al 22/09/2022
Aggiornato al 22/11/2021
Aggiornato al 10/10/2021

PDF Lista comparazione dei componenti di AI2 KODULAR THUNKABLEX agg.20210911

Vuoi avere più informazioni sul Coding visuale? Vai alla pagina dei Blocchi incorporati dove potrai imparare a scrivere il linguaggio di programmazione per App Inventor 2, Kodular e Thunkable X. Visita la pagina del Blog con le ultime notizie sulle le tre piattaforme. Nella pagina Documentazione troverai i collegamenti ai forum, il glossario, i link ai siti dei migliori programmatori, i download e tanti altri accessori.