App_TinyDB_Agenda_V2 (sostituisce versione precedente)

Questa applicazione mostra come:

  • Creare un’agenda con dati persistenti su un dispositivo cellulare o tablet.
  • Ogni voce d'agenda abbia la data nella quale viene redatta
  • Le note possono essere cancellate
Per cancellare i contenuti dell'agenda in modo completo occorre usare la funzione di sistema di Android.
Andare in Impostazioni > Gestione delle applicazioni > Selezionare la app
La finestra che si apre contiene le informazione dell'applicazione.
Qui è possibile, fra altre cose, cancellare tutti i dati e disinstallarla.
(un'immagine della finestra è nell'ultima parte del capitolo).

Componenti e proprietà da assegnare:

Componente

Gruppo

Nome

Proprietà

 

 

 

Text

dimensioni

HorizontalArrangement.jpgOrizz.Arr.

ScreenArr.

HA

 

Fill Parent

ListPicker2.jpgListPicker

Basic

lpLegge

Legge agenda

Fill Parent

ListPicker2.jpgListPicker

Basic

lpCancella

Cancella voce

Fill Parent

TextBox2.jpg TextBox

Basic

tbAgendaEntryData

inserire qui i dati(Hint)

200px x Fill Parent

Button2.jpg Button

Basic

bMemorizza

Memorizza

Fill Parent

TinyDB2.jpgTinyDB

Basic

TinyDB

 

 

Clock2.jpgClock

Basic

Clock

 

 

 

 

Come dovrebbero presentarsi la pagina Design e l’Emulatore :

Aprire Blocks Editor

Vengono dichiarate tre variabili


Conterrà la quantità delle voci


Lista che conterrà le voci


Prima parte del tag con il quale saranno salvati i dati.
Il contenuto non cambierà, viene usata come Costante.

All'avvio va in esecuzione in blocco initialize.

Viene testato se l'agenda è vuota o se contiene già dei dati.
In questo secondo caso ne viene memorizzata la quantità nella variabile AgendaNum
Subito dopo viene chiamata le procedura che legge i dati contenuti nell'Agenda

Lettura dei contenuti dell'Agenda.
Questa procedura verrà chiamata anche dopo ogni cancellazione di dati.

Vengono letti i dati sul dispositivo.

  • AgendaList: è una lista vuota che al termine del blocco conterrà i dati dell'agenda
  • for range: permette di scorrere i dati memorizzati
    • (variable) name 1: variabile che conterrà i valori da start a end della scansione.
    • (start) number 1: valori di inizio, in questo caso 1
    • ()end global AgendaNum: valore finale di lettura, in questo caso la lunghezza del'agenda.
    • (step) number 1: valore di incremento nella lettura. Con il valore 1 vengono letti tutti i dati da start a end
    • (insert list item) i dati letti verranno inseriti nella lista AgendaList
      • (list) global AgendaList: nome della lista dove i dati verranno inseriti
      • (index) value i: index del dato nella lista
      • (item) call TinyDB1.GetValue: vengono inseriti i dati veri e propri.
  • lpLegge.Elements: i dati verranno inseriti nel listPicker (Legge agenda) per la lettura
  • lpCancelal.Elements: i dati verranno inseriti nel listPicker (Cancella voce) per eventuiale cancellazzione

Inserimento dei dati:

L'inserimento testuale dei dati verrà effettuato nel componente tbAgendaEntryData (Hint = inserire qui i dati).
L'unica cosa che questo componente fa è permettere l'editing testuale.
Tutto il resto del codice si trova all'interno del componente Button bMemorizza (Memorizza)


Il lavoro di memorizzazione viene svolto quando viene lanciato l'evento Click per il pulsante bMemorizza.
Per prima cosa viene testato che il componente tbAgendaEntryData non sia vuoto.
Questo viene fatto per mezzo del blocco if test - then do (se test ha esito positivo - allora fare).
Viene misurata la lunghezza del contenuto e se questa è zero vuol dire che il componente tbAgendaEntryData non contiene testo; quindi il codice nel then do non viene eseguito.

Se la lunghezza del testo è superiore a zero vengono eseguiti i blocchi in then do (allora fare)

  • TinyDB1StoreValue, si occupa di scrivere i dati sul dispositivo
  • tag: (identificativo del dato)
  • global AgendaItem: global AgendaNum
  • valure To Store: (valore associato all'identificativo)
    • call Clock1.FormatDate - call Clock1.Now : data dell'operazione
    • text -
    • tbAgendaEntryData.text : dati digitati nel TextBox dell'utente
    • tbAgendaEntryData.text (vuota l TextBox)
    • AgendaNum
      • global AgendaNum + number 1 : aumente di 1 la quantità delle voci
      • TintDB1.StoreValue > tag: memorizza preparandosi a nuovo inserimento.
    • text count
      • TintDB1.StoreValue > > valure To Store:
        o AgendaNum
    • LeggeElencodati: Terminato l'inserimento legge l'elenco dati aggiornando
      • lpLegge (Legge agenda)
      • lpCancella (Cancella voce)

Cancellazione dei dati:

La cancellazione dei dati avviene sopra per ogni singola voce sovrascrivendo il contenuto.
Molto semplicemente aprendo il ListPicher viene presentata la lista dalla quale scegliere il dato da cancellare.

Il codice viene lanciato dopo (After) la scelta.
lpCancelal.AfterPicking contiene due chiamate di procedura,
"CancellaVoce", dove verrà cancelalta la voce ed
"Legge ElencoDati", vista in precedenza, dove i due ListiPicking vengono aggiornati.
Naturalmente, è possibile non cancellare niente agendo sul pulsante a freccia del dispositivo.

Il blocco procedura CancelalVoce si occupa di cancellare una voce dall'Agenda

  • TinyDB1StoreValue, si occupa di scrivere i dati sul dispositivo.
  • tag:
    • global AgendaItem è la Costante descritta all'inizio.
    • ilCancelal.SelectionIndex, è la posizione del dato da cancellare nell'Agenda selezionato con lpCancellaAfterPicking.
  • value To Store:
    • text cancellato, è il testo che sostituirà la voce cancellata.
Come cancellare totalmente i dati senza cancellare l'applicazione: