SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
Prof. Antonio S. Calanducci
20 May 2016
Prof. Antonio S. Calanducci
Corso di Laurea in Informatica, Unict
Laboratorio Avanzato di
Programmazione II
Lesson 8: Properties,
Database, Media, Filesystem
Meccanismi di persistenza
Permette di salvare i dati dell'app tra una esecuzione e
l'altra
Due metodi:
• Properties API (Titanium.App.Properties)
• utile per salvare semplici coppie chiave-valore
• tipi consentiti (Bool, Double, Int, List, String)
• Database API (Titanium.Database)
da usare quando si hanno la complessità aumenta
per informazioni strutturate
SQLite (db in un file)
Properties API
Salvare una property:
• Titanium.App.Properties.setString("username","tcaland")
;
• Titanium.App.Properties.setInt("LastScore", 1434);
• Titanium.App.Properties.setBool("completed",false);
• Titanium.App.Properties.setList("todolist",todoList);
Leggere una property:
• var user =
Titanium.App.Properties.getString("username",”guest”);
• var todoList =
Titanium.App.Properties.getList("todolist",[]);
Hands-on
Modifichiamo la nostra applicazione To
Do List aggiungendo la property
• todolist di tipo List
che viene caricata ad ogni avvio dell'app
riscritta ogni volta che viene aggiunta
una nuova to do
Database API
Sia iOS che Android hanno il supporto nativo a SQLite
• un database contenuto in un file
Un DB è utile quando:
• dati da gestire ben strutturati
• grandi quantità di dati (> 20 oggetti --> altrimenti
usiamo le Properties)
Possibile importare database esistenti con:
• var db = Titanium.Database.install(path_db, name);
il file .sql deve stare dentro la cartella Resource
Database API
Creazione (o apertura di un database):
• var db =
Titanium.Database.open(nome_database);
Chiusura di un db:
• db.close();
Esecuzione di una query SQL:
• var result = db.execute("SELECT * FROM
toDoList");
• restituisce un oggetto Ti.Database.ResultSet
Gestione dei ResultSet
Accesso ai campi del ResultSet:
• var l = result.fieldByName("Location");
• var dueDate = result.fieldByName("data");
Scorrere in avanti il resultSet:
• result.next()
• restituisce falso se non ci sono altri records
• la property result.rowCount restituisce il numero di
righe
• il metodo result.isValidRow() restituisce vero se la riga
è valida
Refresh di SQL
Creazione di una nuova tabella:
• CREATE TABLE IF NOT EXISTS todos(id INTEGER
PRIMARY KEY, title TEXT, location TEXT, alarm
INTEGER, dueDate TEXT)
• Tipi supportati: INTEGER, REAL, TEXT, BLOB, NULL
Inserimento di un record in una tabella:
• INSERT INTO todos(title,location,alarm, dueDate)
VALUES ('Pane','Panificio',0,'June 7,2011')
Cancellazione di un record in una tabella:
• DELETE FROM todos WHERE id=5
Refresh di SQL
Aggiornamento di un campo in un
record esistente:
• UPDATE todos SET alarm=1 WHERE
id=5
Ricerca con condizioni:
• SELECT * FROM todos WHERE title
LIKE "Pane%" AND alarm=0
Passaggio parametri a SQL
Non sempre sappiamo a priori quali sono i valori
da inserire in un record:
• possiamo utilizzare il placeholder
(segnaposto) ? che poi verrà sostituito dal
valore di una variabile
• da usare con db.execute
Es:
• db.execute("INSERT INTO todos(title, location,
alarm, dueDate) VALUES (?, ?, ?, ?)", todo.title,
todo.location, todo.alarm, todo.dueDate)
Esempio
var db = Ti.Database.open("ToDoDB");
db.execute("CREATE TABLE IF NOT EXISTS todos(id INTEGER
PRIMARY KEY, title TEXT, location TEXT, alarm INTEGER,
dueDate TEXT)");
var result = db.execute("SELECT * FROM todos");
for (var i=0, j=result.rowCount ; i < j; i++) {
var todo = {};
todo.title = result.fieldByName("title");
todo.location = result.fieldByName("location");
todo.alarm = result.fieldByName("alarm");
todo.dueDate = result.fieldByName("dueDate");
todo.hasChild = true;
toDoList.push(todo);
result.next();
}
db.close();
Hands on
Modifichiamo la nostra to do list con le API per i
database:
• apriamo all'avvio il database ToDoDB
• creiamo la tabella todos se nn esiste già
• leggiamo tutti i record della tabella todos e
popoliamo l'array (locale) toDoList (che è il
datasource della nostra TableView)
• ogni volta che aggiungiamo una nuova to do,
aggiungiamo un record al nostro database con il
comando INSERT
• https://gist.github.com/1408643
Accedere a Camera/Gallery
La maggior parte dei dispositivi mobili
iOS/Android dispongono di una Photo/
VideoCamera che permette il
salvataggio di photo e video nella
Gallery
Titanium ha API che permettono di
accedere alla photo camera e alla gallery
(quasi identiche):
Media APIs
Titanium.Media.showCamera(object)
Titanium.Media.openPhotoGallery(object)
object: dizionario con le seguenti property:
• success : function() chiamata quando la foto è stata
scattata/selezionata
• error: function() in caso di errore
• cancel: function() se l'utente annulla
• saveToPhotoGallery: booleano, salva la foto in gallery
• allowEditing: booleano, se l'utente può
ridimensionare
Esempio
var foto = Ti.UI.createImageView({
image: "todo.png",
width: 120,
height: 120,
top: 200
});
foto.addEventListener('click', function(e) {
Ti.Media.openPhotoGallery({
success: function(e) {
foto.image = e.media;
},
cancel: function() {},
error: function() { /* gestisci l'errore */},
allowEditing: true
});
});
Salvataggio su file system
E' possibile leggere e scrivere sul file
system local del dispositivo:
• es. salvataggio di file remoti
• oggetti multimediali (video, foto, audio)
tramite le API Ti.Filesystem
Es. di scrittura:
var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory,
'foto.jpg');
f.write(foto.image);
Storage Locations
Ti.Filesystem.applicationDataDirectory
(read/write)
Ti.Filesystem.resourcesDirectory 

(read-only)
Ti.Filesystem.tempDirectory 

(read-write)
Ti.Filesystem.externalStorageDirectory
(read-write)
Hands-on
Aggiungere una ImageView alla toDo List
Al click sulla ImageView sarà possibile
selezionare una photo dalla Gallery (o dalla
Camera se eseguito su dispositivo)
L'immagine sarà salvata sul file system locale
Verrà aggiunto nel db un nuovo campo URL, che
contiene il nome dell'immagine appena salvata
Modificare il codice affinchè al riavvio dell'app
venga recuperata correttamente l'immagine dal
filesystem e visualizzata sulla ImageView
Question

Contenu connexe

Similaire à LAP 2 Lezione 8: Properties, Database, Media, Filesystem

MS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMobileSchool
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscenceAndrea Gottardi
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteGiuseppe Toto
 
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...paolabassi91
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Abusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side StorageAbusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side Storageameft
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai frameworkFrancesca1980
 
iot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 oraiot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 oraAlessio Biasiutti
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)FLT.lab
 
SQLite in Xamarin.Forms
SQLite in Xamarin.FormsSQLite in Xamarin.Forms
SQLite in Xamarin.FormsGuido Magrin
 
ios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaDario Rusignuolo
 

Similaire à LAP 2 Lezione 8: Properties, Database, Media, Filesystem (20)

MS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partIIMS_corso base iOS iPhone_partII
MS_corso base iOS iPhone_partII
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscence
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
Progetto e sviluppo di un'applicazione per dispositivi mobili per la visualiz...
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Thingspeak: integrazione
Thingspeak: integrazioneThingspeak: integrazione
Thingspeak: integrazione
 
Abusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side StorageAbusing HTML 5 Client-side Storage
Abusing HTML 5 Client-side Storage
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 
iot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 oraiot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 ora
 
PoC IoT in 1 ora
PoC IoT in 1 oraPoC IoT in 1 ora
PoC IoT in 1 ora
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)
 
SQLite in Xamarin.Forms
SQLite in Xamarin.FormsSQLite in Xamarin.Forms
SQLite in Xamarin.Forms
 
ios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - ita
 

Plus de University of Catania

Lesson 02 - React Native Development Environment Setup
Lesson 02 - React Native Development Environment SetupLesson 02 - React Native Development Environment Setup
Lesson 02 - React Native Development Environment SetupUniversity of Catania
 
Abilità Informatiche - Lezione 01 introduzione al corso
Abilità Informatiche - Lezione 01   introduzione al corsoAbilità Informatiche - Lezione 01   introduzione al corso
Abilità Informatiche - Lezione 01 introduzione al corsoUniversity of Catania
 
LAP II - Lezione 01 Introduzione al corso
LAP II - Lezione 01   Introduzione al corsoLAP II - Lezione 01   Introduzione al corso
LAP II - Lezione 01 Introduzione al corsoUniversity of Catania
 
Lezione 02 React and React Native installation and Configuration
Lezione 02   React and  React Native installation and ConfigurationLezione 02   React and  React Native installation and Configuration
Lezione 02 React and React Native installation and ConfigurationUniversity of Catania
 
Presentazione Corso LAP 2 A.A. 2016/2017
Presentazione Corso LAP 2 A.A. 2016/2017Presentazione Corso LAP 2 A.A. 2016/2017
Presentazione Corso LAP 2 A.A. 2016/2017University of Catania
 
Sistemi lezione-iv-internet-e-posta-elettronica
Sistemi lezione-iv-internet-e-posta-elettronicaSistemi lezione-iv-internet-e-posta-elettronica
Sistemi lezione-iv-internet-e-posta-elettronicaUniversity of Catania
 
Sistemi lezione-iii-reti-di-calcolatori
Sistemi lezione-iii-reti-di-calcolatoriSistemi lezione-iii-reti-di-calcolatori
Sistemi lezione-iii-reti-di-calcolatoriUniversity of Catania
 
Sistemi lezione viii - google altri servizi
Sistemi   lezione viii - google altri serviziSistemi   lezione viii - google altri servizi
Sistemi lezione viii - google altri serviziUniversity of Catania
 
Sistemi lezione xi - picasa web album - social bookmarking - notizie 2
Sistemi   lezione xi - picasa web album - social bookmarking - notizie 2Sistemi   lezione xi - picasa web album - social bookmarking - notizie 2
Sistemi lezione xi - picasa web album - social bookmarking - notizie 2University of Catania
 
Sistemi lezione x - introduzione al web 2.0 - flickr
Sistemi   lezione x - introduzione al web 2.0 - flickrSistemi   lezione x - introduzione al web 2.0 - flickr
Sistemi lezione x - introduzione al web 2.0 - flickrUniversity of Catania
 
Sistemi di elaborazione dell'informazione - Google Docs basics
Sistemi di elaborazione dell'informazione - Google Docs basicsSistemi di elaborazione dell'informazione - Google Docs basics
Sistemi di elaborazione dell'informazione - Google Docs basicsUniversity of Catania
 

Plus de University of Catania (14)

Lezione 03 Introduzione a react
Lezione 03   Introduzione a reactLezione 03   Introduzione a react
Lezione 03 Introduzione a react
 
Lesson 02 - React Native Development Environment Setup
Lesson 02 - React Native Development Environment SetupLesson 02 - React Native Development Environment Setup
Lesson 02 - React Native Development Environment Setup
 
Abilità Informatiche - Lezione 01 introduzione al corso
Abilità Informatiche - Lezione 01   introduzione al corsoAbilità Informatiche - Lezione 01   introduzione al corso
Abilità Informatiche - Lezione 01 introduzione al corso
 
LAP II - Lezione 01 Introduzione al corso
LAP II - Lezione 01   Introduzione al corsoLAP II - Lezione 01   Introduzione al corso
LAP II - Lezione 01 Introduzione al corso
 
Lezione 02 React and React Native installation and Configuration
Lezione 02   React and  React Native installation and ConfigurationLezione 02   React and  React Native installation and Configuration
Lezione 02 React and React Native installation and Configuration
 
Presentazione Corso LAP 2 A.A. 2016/2017
Presentazione Corso LAP 2 A.A. 2016/2017Presentazione Corso LAP 2 A.A. 2016/2017
Presentazione Corso LAP 2 A.A. 2016/2017
 
Sistemi lezione-iv-internet-e-posta-elettronica
Sistemi lezione-iv-internet-e-posta-elettronicaSistemi lezione-iv-internet-e-posta-elettronica
Sistemi lezione-iv-internet-e-posta-elettronica
 
Sistemi lezione-iii-reti-di-calcolatori
Sistemi lezione-iii-reti-di-calcolatoriSistemi lezione-iii-reti-di-calcolatori
Sistemi lezione-iii-reti-di-calcolatori
 
Sistemi lezione-ii
Sistemi lezione-iiSistemi lezione-ii
Sistemi lezione-ii
 
Sistemi lezione xv - cenni su css
Sistemi   lezione xv - cenni su cssSistemi   lezione xv - cenni su css
Sistemi lezione xv - cenni su css
 
Sistemi lezione viii - google altri servizi
Sistemi   lezione viii - google altri serviziSistemi   lezione viii - google altri servizi
Sistemi lezione viii - google altri servizi
 
Sistemi lezione xi - picasa web album - social bookmarking - notizie 2
Sistemi   lezione xi - picasa web album - social bookmarking - notizie 2Sistemi   lezione xi - picasa web album - social bookmarking - notizie 2
Sistemi lezione xi - picasa web album - social bookmarking - notizie 2
 
Sistemi lezione x - introduzione al web 2.0 - flickr
Sistemi   lezione x - introduzione al web 2.0 - flickrSistemi   lezione x - introduzione al web 2.0 - flickr
Sistemi lezione x - introduzione al web 2.0 - flickr
 
Sistemi di elaborazione dell'informazione - Google Docs basics
Sistemi di elaborazione dell'informazione - Google Docs basicsSistemi di elaborazione dell'informazione - Google Docs basics
Sistemi di elaborazione dell'informazione - Google Docs basics
 

Dernier

Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleGiornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniGiornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaServizi a rete
 

Dernier (7)

Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleGiornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniGiornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
 

LAP 2 Lezione 8: Properties, Database, Media, Filesystem

  • 1. Prof. Antonio S. Calanducci 20 May 2016 Prof. Antonio S. Calanducci Corso di Laurea in Informatica, Unict Laboratorio Avanzato di Programmazione II Lesson 8: Properties, Database, Media, Filesystem
  • 2. Meccanismi di persistenza Permette di salvare i dati dell'app tra una esecuzione e l'altra Due metodi: • Properties API (Titanium.App.Properties) • utile per salvare semplici coppie chiave-valore • tipi consentiti (Bool, Double, Int, List, String) • Database API (Titanium.Database) da usare quando si hanno la complessità aumenta per informazioni strutturate SQLite (db in un file)
  • 3. Properties API Salvare una property: • Titanium.App.Properties.setString("username","tcaland") ; • Titanium.App.Properties.setInt("LastScore", 1434); • Titanium.App.Properties.setBool("completed",false); • Titanium.App.Properties.setList("todolist",todoList); Leggere una property: • var user = Titanium.App.Properties.getString("username",”guest”); • var todoList = Titanium.App.Properties.getList("todolist",[]);
  • 4. Hands-on Modifichiamo la nostra applicazione To Do List aggiungendo la property • todolist di tipo List che viene caricata ad ogni avvio dell'app riscritta ogni volta che viene aggiunta una nuova to do
  • 5. Database API Sia iOS che Android hanno il supporto nativo a SQLite • un database contenuto in un file Un DB è utile quando: • dati da gestire ben strutturati • grandi quantità di dati (> 20 oggetti --> altrimenti usiamo le Properties) Possibile importare database esistenti con: • var db = Titanium.Database.install(path_db, name); il file .sql deve stare dentro la cartella Resource
  • 6. Database API Creazione (o apertura di un database): • var db = Titanium.Database.open(nome_database); Chiusura di un db: • db.close(); Esecuzione di una query SQL: • var result = db.execute("SELECT * FROM toDoList"); • restituisce un oggetto Ti.Database.ResultSet
  • 7. Gestione dei ResultSet Accesso ai campi del ResultSet: • var l = result.fieldByName("Location"); • var dueDate = result.fieldByName("data"); Scorrere in avanti il resultSet: • result.next() • restituisce falso se non ci sono altri records • la property result.rowCount restituisce il numero di righe • il metodo result.isValidRow() restituisce vero se la riga è valida
  • 8. Refresh di SQL Creazione di una nuova tabella: • CREATE TABLE IF NOT EXISTS todos(id INTEGER PRIMARY KEY, title TEXT, location TEXT, alarm INTEGER, dueDate TEXT) • Tipi supportati: INTEGER, REAL, TEXT, BLOB, NULL Inserimento di un record in una tabella: • INSERT INTO todos(title,location,alarm, dueDate) VALUES ('Pane','Panificio',0,'June 7,2011') Cancellazione di un record in una tabella: • DELETE FROM todos WHERE id=5
  • 9. Refresh di SQL Aggiornamento di un campo in un record esistente: • UPDATE todos SET alarm=1 WHERE id=5 Ricerca con condizioni: • SELECT * FROM todos WHERE title LIKE "Pane%" AND alarm=0
  • 10. Passaggio parametri a SQL Non sempre sappiamo a priori quali sono i valori da inserire in un record: • possiamo utilizzare il placeholder (segnaposto) ? che poi verrà sostituito dal valore di una variabile • da usare con db.execute Es: • db.execute("INSERT INTO todos(title, location, alarm, dueDate) VALUES (?, ?, ?, ?)", todo.title, todo.location, todo.alarm, todo.dueDate)
  • 11. Esempio var db = Ti.Database.open("ToDoDB"); db.execute("CREATE TABLE IF NOT EXISTS todos(id INTEGER PRIMARY KEY, title TEXT, location TEXT, alarm INTEGER, dueDate TEXT)"); var result = db.execute("SELECT * FROM todos"); for (var i=0, j=result.rowCount ; i < j; i++) { var todo = {}; todo.title = result.fieldByName("title"); todo.location = result.fieldByName("location"); todo.alarm = result.fieldByName("alarm"); todo.dueDate = result.fieldByName("dueDate"); todo.hasChild = true; toDoList.push(todo); result.next(); } db.close();
  • 12. Hands on Modifichiamo la nostra to do list con le API per i database: • apriamo all'avvio il database ToDoDB • creiamo la tabella todos se nn esiste già • leggiamo tutti i record della tabella todos e popoliamo l'array (locale) toDoList (che è il datasource della nostra TableView) • ogni volta che aggiungiamo una nuova to do, aggiungiamo un record al nostro database con il comando INSERT • https://gist.github.com/1408643
  • 13. Accedere a Camera/Gallery La maggior parte dei dispositivi mobili iOS/Android dispongono di una Photo/ VideoCamera che permette il salvataggio di photo e video nella Gallery Titanium ha API che permettono di accedere alla photo camera e alla gallery (quasi identiche):
  • 14. Media APIs Titanium.Media.showCamera(object) Titanium.Media.openPhotoGallery(object) object: dizionario con le seguenti property: • success : function() chiamata quando la foto è stata scattata/selezionata • error: function() in caso di errore • cancel: function() se l'utente annulla • saveToPhotoGallery: booleano, salva la foto in gallery • allowEditing: booleano, se l'utente può ridimensionare
  • 15. Esempio var foto = Ti.UI.createImageView({ image: "todo.png", width: 120, height: 120, top: 200 }); foto.addEventListener('click', function(e) { Ti.Media.openPhotoGallery({ success: function(e) { foto.image = e.media; }, cancel: function() {}, error: function() { /* gestisci l'errore */}, allowEditing: true }); });
  • 16. Salvataggio su file system E' possibile leggere e scrivere sul file system local del dispositivo: • es. salvataggio di file remoti • oggetti multimediali (video, foto, audio) tramite le API Ti.Filesystem Es. di scrittura: var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, 'foto.jpg'); f.write(foto.image);
  • 18. Hands-on Aggiungere una ImageView alla toDo List Al click sulla ImageView sarà possibile selezionare una photo dalla Gallery (o dalla Camera se eseguito su dispositivo) L'immagine sarà salvata sul file system locale Verrà aggiunto nel db un nuovo campo URL, che contiene il nome dell'immagine appena salvata Modificare il codice affinchè al riavvio dell'app venga recuperata correttamente l'immagine dal filesystem e visualizzata sulla ImageView