Gestire i dati: download e salvataggio. L’importanza dei dati La quasi totalità delle applicazioni hala necessità di gestire varie funzionalità relative.

Slides:



Advertisements
Presentazioni simili
Funzionalità di ricerca avanzata guidata EBSCOhost
Advertisements

Gestione di un Sistema di Talk multiutente
Programmazione ad oggetti
Recupero debito quarto anno Primo incontro
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
PHP.
Java: programmazione concorrente con condivisione di memoria
Mantenimento dello stato Laboratorio Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Connessione con MySQL.
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Fondamenti di Informatica
Amministrazione di una rete con Active Directory
Amministrazione di una rete con Active Directory.
I file l I File sono l unità base di informazione nellinterazione tra utente e sistema operativo l Un file e costituito da un insieme di byte attinenti.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
1 Basi di dati e Web Prof. Stefano Paraboschi Prof. Barbara Pernici.
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Esercitazione 6 MySQL Laboratorio di Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Corso di Informatica A.A
memoria gestita staticamente:
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Sistemi Operativi GESTIONE DEI PROCESSI.
I File.
Supporto per servizi di File Hosting Presentazione di progetto per lesame di Reti di Calcolatori LS Valerio Guagliumi
Distributed File System Service Dario Agostinone.
Ing. Enrico Lecchini BetaTre S.r.l.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Modulo 7 – reti informatiche u.d. 1 (syllabus – )
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
Creare pagine web Xhtlm. Struttura di una pagina.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Lazienda SC Informatica si occupa della progettazione e della realizzazione di sistemi informatici dedicati alle farmacie. Fornisce inoltre un servizio.
ASP – Active Server Pages - 1 -Giuseppe De Pietro Introduzione ASP, acronimo di Active Server Pages, sta ad indicare una tecnologia per lo sviluppo di.
Lezione 8.
Nemesi Creazione e pubblicazione di una rivista online tramite l’utilizzo di Java Message Service.
Laboratorio di Servizi Web - servlet - Ardissono 1 Java Servlet API package javax.servlet: include classi e interfacce di gestione di servlet indipendenti.
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Laboratorio di Servizi Web - servlet - Ardissono 1 Chiarimenti su Servlet Note aggiuntive su architettura di applicazione web che usa Servlet per gestire.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Università degli Studi G.D’Annunzio (Pe) Corso di Laurea Specialistica in Eco.Informatica.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
CIVIS canale telematico per l’assistenza sulle comunicazioni di irregolarità, sulle cartelle di pagamento e la presentazione documenti (36/ter)
+ Gestire la persistenza Nicolò Sordoni. + Meccanismi di persistenza dei dati In Windows Phone, come negli altri ambienti, abbiamo tre soluzioni principali.
+ Connettersi al web Nicolò Sordoni. + Verificare se lo smartphone è connesso Per poter accedere alla rete, è consigliato innanzitutto verificare se il.
+ Geolocalizzazione Nicolò Sordoni. + Servizi di localizzazione In Windows Phone, la posizione dell’utente può essere rilevata in 3 differenti modi: GPS:
Monitoring applicativo SaaS Tutorial 30/09/2015. Finalità Il monitoraggio applicativo per verificare, quantificare e controllare l’automazione introdotta.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Usare le mappe. MapKit Per utilizzare le mappe all’interno di uno specifico VIewController, è sufficiente inserire al suo interno una view di tipo MKMapView.
Gestire la navigazione. Creare un’app multi Controller La quasi totalità delle app è suddivisa in più ViewControllers, ognuno con specifiche funzionalità.
Controlli. Storyboard L’assistant editor consente una visualizzazione contestuale in cui sono affiancati verticalmente il ViewController nello storyboard.
Android Intent, AlertDialog, SharedPreferences. Intents.
Controlli. ActionSheet e Alert Selezionare un’azione In molte situazioni è necessario fornire all’utente una scelta fra varie azioni disponibili. per.
Transcript della presentazione:

Gestire i dati: download e salvataggio

L’importanza dei dati La quasi totalità delle applicazioni hala necessità di gestire varie funzionalità relative alle informazioni: Scaricare informazioni da un server tramite HTTP Inviare informazioni ad un server Memorizzare i dati in maniera persistente Recuperare i dati memorizzati

Utilizzare il protocollo HTTP

Preparare la richiesta Il protocollo HTTP si basa su una sequenza di richieste/risposte, pertanto è indispensabile, per avviare una comunicazione con il server, inizializzare ed inviare una richiesta. Le principali informazioni sono: Url della pagina Metodo utilizzato (Post, Get, Put, ecc.) Eventuali parametri Header HTTP (tipo di informazioni inviate, formati accettati, ecc.)

Preparare la richiesta Body : Il contenuto vero e proprio della richiesta che può essere di vari tipi: Una semplice stringa Un oggetto di tipo JSON Una serie di coppie chiave/valore Un’immagine Un MultipartFormData : un body suddiviso in più parti che consente di inviare informazioni di tipo differente in un’unica richiesta

NSMutableURLRequest In Swift, la classe corrispondente ad una richiesta HTTP è NSMutableURLRequest. Tale classe ci permette di inizializzare le proprietà appena indicate: Url : Solitamente passato come parametro al costruttore Metodo: A tale scopo esiste la proprietà HTTPMethod che deve essere valorizzata con una stringa corrispondente al nome di un metodo HTTP (esempio: request.HTTPMethod = "POST”) Parametri : in caso di GET sono impostati direttamente nell’URL, altrimenti è necessario utilizzare il body

NSMutableURLRequest Header HTTP: La classe espone il metodo addValue(value: String, forHTTPHeaderField: String) che accetta due stringhe; la prima è il valore e la seconda la chiave Body : Per impostare il Body della richiesta è presente la proprietà HTTPBody, di tipo NSData. In base al tipo di richiesta esistono vari metodi per inizializzare tale property.

Inviare la richiesta : NSURLSession Una volta impostata la richiesta, è necessario inviarla al server. La classe delegata allo svolgimento di tale compito è NSURLSession. Per inviare una richiesta sono richiesti i seguenti passaggi: Ottenere un’istanza di tipo Session : La classe NSURLSession espone un metodo statico, denominato sharedSession, che restituisce una sessione condivisa all’interno del device. In tal modo, all’interno del dispositivo, è possibile condividere cache e cookies.

Inviare la richiesta : NSURLSession Invocare il metodo dataTaskWithRequest della session. Questo metodo accetta due parametri: request : la richiesta definita precedentemente. completionHandler : la funzione che sarà invocata alla ricezione della risposta. Tale metodo non invia direttamente la richiesta, ma restituisce un oggetto di tipo task che sarà responsabile di effettuarne l’invio asincrono. Invocare il metodo resume() sul task, per richiedere l’invio effettivo della richiesta.

CompletionHandler Per gestire la richiesta è necessario utilizzare la funzione passata come secondo parametro al metodo dataTaskWithRequest. Tale funzione restituisce void e fornisce in ingresso 3 parametri: data : Un oggetto di tipo NSData che rappresenta il contenuto vero e proprio della risposta response : Un NSURLResponse che fornisce informazioni sugli header HTTP della risposta. error : fornisce informazioni su un eventuale errore riscontrato durante la comunicazione. Se non si sono verificati errori è nil.

Response data Il parametro di maggior interesse è sicuramente data. Per gestire le informazioni in esso contenuto è indispensabile conoscere il formato e la struttura del messaggio di risposta. Se ad esempio si volesse ottenere il messaggio di risposta come stringa, è sufficiente l’istruzione: NSString(data: data, encoding: NSUTF8StringEncoding)

Ottenere una risposta in JSON Uno dei formati più utilizzati nella comunicazione mobile- server è sicuramente il formato JSON. Per gestire comunicazioni che utilizzano tale sintassi, esiste un’apposita classe denominata NSJSONSerialization, che si occupa di serializzare/deserializzare oggetti in JSON. Tale classe espone un metodo statico che, dato un oggetto di tipo NSData contenente un JSON, lo converte in un NSDictionary.

JSONObjectWithData Questo metodo accetta 3 parametri in ingresso: L’oggetto di tipo NSData da convertire Un oggetto di tipo NSJSONReadingOptions, che permette di indicare come gestire alcuni aspetti della conversione (principalmente se gli oggetti restituiti devono essere mutable). Un’istanza di NSError, passata per riferimento. Si tratta di un parametro di tipo out, utilizzato per indicare se si sono verificati errori di lettura.

Aggiornare l’interfaccia Dato che il processo di comunicazione è gestito in un thread che non ha accesso all’interfaccia, per modificare le view, è necessario richiederne l’aggiornamento all’interface thread. Per farlo è necessario usare il metodo dispatch_async(). Il compito di questo metodo è quello di richiedere ad un differente thread l’esecuzione di un blocco di codice. Il blocco deve essere inserito in un’apposita coda.

dispatch_async Il metodo accetta due parametri: La coda in cui inserire il blocco. Per ottenere quella del main thread è sufficiente utilizzare dispatch_get_main_queue(). Il blocco di codice da eseguire.

Persistenza dei dati

Gestione i file In iOS è possibile salvare le informazioni nella memoria persistente del dispositivo, all’interno di file. Per farlo è necessario: Ottenere il percorso di una cartella all’interno della quale l’utente ha permessi di scrittura Ottenere il percorso del file all’interno del quale salvare i dati Effettuare l’operazione di lettura/scrittura sul file.

Gestione dei file Esistono varie alternative per salvare le informazioni; una delle più utilizzate, per la sua flessibilità, è quella che fa uso di NSKeyedArchiver/Unarchiver, che sono due classi responsabili del salvataggio/recupero delle informazioni dal disco. Per utilizzare questo metodo è necessario che gli oggetti salvati siano di tipo NSObject e aderiscano al protocollo NSCoding.

NSCoding Il protocollo NSCoding permette di archiviare/recuperare oggetti dalla memoria, grazie al supporto di un oggetto di tipo NSCoder, responsabile del salvataggio delle singole proprietà dell’oggetto. Per rispettare il protocollo NSCoding è necessario ridefinire i seguenti metodi: encodeWithCoder(coder: NSCoder) : invocato quando l’oggetto sta per essere salvato su disco. init(coder: NSCoder) : invocato quando l’oggetto viene recuperato dalla memoria persistente.

encodeWithCoder Essendo un metodo ereditato da objective-C, è necessario anteporre alla signature del metodo la public func encodeWithCoder(coder: NSCoder) All’interno di questo metodo è necessario codificare le singole proprietà dell’oggetto, associando ognuna ad una chiave. In tal modo sarà possibile recuperarle in fase di decodifica delle informazioni. Per farlo, il principale metodi esposto dalla classe NSCoder, è: coder.encodeObject(object: AnyObject, forKey:String)

init Nel momento in cui l’oggetto viene recuperato dalla memoria è invocato l’overload del metodo init che accetta un NSCoder come parametro. La sintassi public required init(coder decoder: NSCoder) Questo costruttore permette di recuperare le informazioni salvate in precedenza, grazie all’associazione chiave/valore e di inizializzare le proprietà dell’oggetto. Il metodo per farlo è: decoder.decodeObjectForKey(key: String) che restituisce un oggetto di tipo AnyObject. E’ pertanto obbligatorio forzare il downcast al tipo corretto.

Ottenere il percorso della cartella Per salvare le informazioni abbiamo bisogno di accedere ad una cartella in cui l’utente ha il permesso di scrittura. Per recuperare un elenco di cartelle che soddisfino specifiche condizioni esiste il metodo NSSearchPathForDirectoriesInDomains, che accetta i seguenti parametri: directory : oggetto di tipo NSSearchPathDirectory, che specifica di che tipo di cartella abbiamo bisogno. Esistono innumerevoli valori possibili; per salvare informazioni, è consigliabile l’utilizzo della DocumentDirectory

Ottenere il percorso della cartella domainMask : di tipo NSSearchPathDomainMask, specifica all’interno di quale root Folder effettuare la ricerca. Specificando UserDomainMask, verranno cercate solamente le cartelle dell’utente. expandTilde : valore booleane usato per indicare se è necessario gestire opportunamente il caso in cui il percorso contenga il simbolo tilde ( ~ ). Questo metodo restituirà un array di stringhe, ognuna delle quali rappresenta il path di una cartella. Per il nostro obiettivo, accederemo a quella in posizione 0. Per il percorso del file, è sufficiente concatenare, al path della cartella, il simbolo / seguito dal nome del file

Salvataggio delle informazioni Una volta ottenuto il percorso del file, è possibile procedere con il salvataggio dei dati. Per farlo utilizziamo la classe NSKeyedArchiver, responsabile della gestione del salvataggio di informazioni persistenti. E’ sufficiente invocare il seguente metodo statico: NSKeyedArchiver.archiveRootObject(object, toFile: path) passando come parametri l’oggetto da salvare ed il percorso del file.

Recupero delle informazioni. Per il recupero delle informazioni è consigliato effettuare un passaggio in più, cioè verificare che il file esista. L’istruzione è la seguente: NSFileManager.defaultManager().fileExistsAtPath(path) alla quale passiamo in ingresso il percorso del file e restituisce un boolean che indica se tale file esiste o meno. Infine, per il recupero delle informazioni, la classe NSKeyedUnarchiver espone il metodo: unarchiveObjectWithFile(path) che restituirà l’oggetto salvato in precedenza.