+ Gestire la persistenza Nicolò Sordoni. + Meccanismi di persistenza dei dati In Windows Phone, come negli altri ambienti, abbiamo tre soluzioni principali.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Modulo 1 – Ambiente di lavoro Windows 7
Java Stream e File.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Unità D2 Archivi e file.
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
PHP.
Installazione di Apache 2, PHP5, MySQL 5
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Amministrazione di una rete con Active Directory
Amministrazione di una rete con Active Directory.
La Modifica dei Dati in una Base Dati La modifica dei dati contenuti allinterno di una base dati è unoperazione delicata Infatti, ogni potenziale problema.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
File.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Breeze meeting Istruzioni per l’uso - corsisti
Breeze meeting Istruzioni per luso -tutor a cura di Patrizia Vayola.
Introduzione agli stream e alle classi
Il linguaggio ASP Lezione 4 Manipolare i database con ASP Lutilizzo dei FORM per laggiunta dei dati.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Corso di PHP.
File ad accesso casuale o random
Usare la posta elettronica con il browser web
PROGRAMMARE IN C Un ambiente di sviluppo `e un software che serve per scrivere ed eseguire programmi. Generalmente integra almeno 3 funzionalita’: Editor:
Namespaces 1. Utilizzati per contenere tipi (classi, strutture, interfacce … ) ed altri namespaces La Class Library è organizzata gerarchicamente mediante.
Creazione progetto in C++/DEV
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 DTS: Importazione Apertura di un DTS da file di archiviazione strutturata: Per aprire un pacchetto DTS salvato come file di archiviazione strutturata.
I programmi per EpiInfo: istruzioni per l’uso Incontro dei referenti e coordinatori regionali PASSI Roma, 7 Maggio 2008 Gianluigi Ferrante.
Formattazione, Partizioni e dischi
Breeze meeting Istruzioni per l’uso
Nemesi Creazione e pubblicazione di una rivista online tramite l’utilizzo di Java Message Service.
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
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.
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.
Microsoft Access Chiavi, struttura delle tabelle.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Gestione Sicura dei Dati
Aditech Life Acquisizione Parametri Monitoraggio Live da remoto
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
I sistemi operativi Funzioni principali e caratteristiche.
FILE SYSTEM E GESTIONE FILE CREAZIONE DI CARTELLE, COPIA E SPOSTAMENTO DI FILE.
Programmazione orientata agli Oggetti Introduzione a Java.
+ 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:
Gestire i dati: download e salvataggio. L’importanza dei dati La quasi totalità delle applicazioni hala necessità di gestire varie funzionalità relative.
Prof. P.Sanna - Prof.ssa D.Lecca Corso A programmatori 1 La gestione delle risorse e dei file.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Gestire la navigazione. Creare un’app multi Controller La quasi totalità delle app è suddivisa in più ViewControllers, ognuno con specifiche funzionalità.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
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 la persistenza Nicolò Sordoni

+ Meccanismi di persistenza dei dati In Windows Phone, come negli altri ambienti, abbiamo tre soluzioni principali per il salvataggio di informazioni persistenti: LocalSettings : funge da contenitore per le impostazioni della nostra applicazione. Storage : permette di salvare le informazioni all’interno di files, che saranno salvati in un’area a cui solamente la nostra app (oltre al S.O.) avrà accesso. Database locale : In Windows Phone è possibile utilizzare un’istanza dedicata di SQL CE, una versione di SQL Server sviluppata ad hoc per il salvataggio locale delle informazioni.

+ LocalSettings I LocalSettings sono stati concepiti per memorizzare impostazioni relative alla nostra app. Forniscono uno strumento di utilizzo immediato per salvare qualsiasi informazione dell’applicazione, a patto che la sua dimensione non superi gli 8Kb. Possono essere paragonati alle SharedPreferences di Android. L’oggetto che ci consente di gestire queste impostazioni è accessibile tramite la property ApplicationData.Current.LocalSettings ed è di tipo ApplicationDataContainer (namespace Windows.Storage). Tale oggetto espone la proprietà Values, cioè un array associativo all’interno del quale possiamo salvare le informazioni tramite una logica chiave/valore.

+ LocalSettings L’esempio precedente mostra come utilizzare le impostazioni locali. Una volta ottenuto il riferimento all’istanza, è possibile utilizzare l’attributo Values per: Verificare l’esistenza di una chiave salvata in precedenza. Accedere ad valore utilizzando la rispettiva chiave Inserire una coppia chiave valore Eliminare un valore (metodo Remove).

+ LocalSettings Ogni volta che un valore viene aggiunto/rimosso/modificato, la modifica viene automaticamente salvata in maniera persistente, pertanto, anche riavviando l’applicazione, sarà possibile recuperare il valore. Questo meccanismo è stato concepito per informazioni di dimensione ridotta, mentre per memorizzare informazioni più complesse, come elenchi, immagini, ecc. è necessario fare uso di uno degli altri due metodi.

+ Storage Oltre all’utilizzo dei LocalSettings, la soluzione più semplice ed immediata da attuare in termini di tempi di sviluppo è l’utilizzo del File System. Ogni applicazione ha accesso alle seguenti 3 cartelle: Local Folder : una cartella locale alla quale solamente l’applicazione può accedere, sia in lettura che in scittura. Application Folder : la cartella in cui è installata l’app (accessibile in sola lettura). SD Card : accessibile solamente in lettura.

+ Storage La cartella che useremo più di frequente sarà sicuramente quella locale, dato che è l’unica in cui possiamo anche scrivere. E’ necessario innanzitutto importare il namespace che contiene le classi necessarie a lavorare con i files, cioè Windows.Storage. La variabile ApplicationData.Current.LocalFolder ci permette di accedere alla nostra cartella locale. A questo punto siamo in grado di creare un nuovo file, invocando, su tale oggetto, il seguente metodo: StorageFile CreateFileAsync(String fileName, CreationCollisionOption option)

+ Creazione di un file Il metodo appena definito (che è un metodo asincrono) restituisce un oggetto di tipo StorageFile, cioè un file ed accetta in ingresso due parametri: il nome del file ed un enum che indica quale comportamente tenere in caso esista già un file preesistente con lo stesso nome. I valori ammessi sono: FailIfExists : restituisce un errore in caso il file esista già. GenerateUniqueName : genera un nuovo file con un nome univoco OpenIfExists : Anzichè creare un nuovo file, apre quello preesistente. ReplaceExisting : Il vecchio file viene rimpiazzato dal nuovo.

+ Scrivere su file Per scrivere informazioni all’interno di un file, il metodo più semplice è l’utilizzo di un oggetto di tipo DataWriter. Tale oggetto ci consente di inserire solamente i tipi base (String, Int, FLoat, DateTime,...), mentre per inserire oggetti differenti è necessario far uso della serializzazione, che vedremo in seguito.

+ Scrivere su file L’esempio ci mostra come inserire informazioni all’interno del nostro file. E’ necessario innanzitutto creare il file. Dopodichè dobbiamo aprirlo, richiedendo i permessi di lettura e scrittura, ottenendo il riferimento ad un oggetto di tipo RandomAccessStream. Per scrivere sul file dobbiamo creare un’istanza di DataWriter. Lo inizializziamo tramite un apposito costruttore a cui passiamo il riferimento ad uno stream che ci consente di scrivere sul file. Il metodo randomAccessStream.GetOutputStreamAt() ci consente di ottenere tale risultato; il parametro che accetta in input serve per indicare da quale posizione iniziare la scrittura. la keyword using consente di definire un’oggetto che sarà deallocato al termine del corrispondente blocco.

+ Scrivere su file Per effettuare la scrittura vera e propria è sufficiente utilizzare i vari metodo Write messi a disposizione dalla classe DataWriter (WriteString, WriteDouble, WriteDateTime,...). Una volta completata la scrittura dei valori, è necessario effettuare il commit, tramite il metodo StoreAsync(), che provvederà all’inserimento effettivo all’interno del file. Infine, il metodo FlushAsync è necessario per liberare lo stream e completare l’operazione.

+ Leggere da file Per leggere le informazioni da un file, il procedimento è simile a quanto visto per la scrittura. Il metodo da invocare inizialmente in questo caso non è CreateFileAsync, ma GetFilesAsync, passando come parametro il nome del file. E’ sempre necessario aprire un RandomAccessStream, ma in questo caso sono sufficienti i permessi di lettura.

+ Leggere da file La classe che ci consente la lettura delle informazioni è il DataReader. Per inizializzare una sua istanza in questo caso abbiamo bisogno di ottenere l’InputStream, iniziando la lettura sempre dalla posizione 0. Prima di poter procedere alla lettura, è necessario ottenere la dimensione del file, per sapere quanti byte dovranno essere letti. Una volta fatto, è necessario utilizzare i metodi Read (as esempio ReadString) di tale classe.

+ La serializzazione Il metodo che abbiamo appena osservato presenta numerosi limiti. Non è possibile memorizzare dati differenti dai tipi base e la lettura di un file in cui vengono salvate più informazioni di tipo differente può risultare non poco complessa. Per ovviare a questi limiti, il sistema ci offre la possibilità di serializzare gli oggetti delle nostre classi. Serializzare significa trasformare oggetti complessi in formati adatti ad essere scritti su file. I più utilizzati sono XML e JSON. Il processo inverso è la deserializzazione, che, a partire da informazioni testuali strutturate, è in grado di ricostruire gli oggetti in memoria.

+ La serializzazione Per poter serializzare una classe, è necessario indicare al sistema quali, fra i suoi attributi, potranno essere serializzati. Per farlo, il C# prevede la seguente sintassi: DataContract : indica che la classe può essere serializzata. Nel caso non venga specificato, si potrebbe avere un runtime error. DataMember : identifica un attributo che può essere serializzato.

+ La serializzazione La classe responsabile dell’effettiva serializzazione, è DataContractSerializer, definita nel namespace System. Runtime.Serialization. Per inizializzarla è necessario passare al costruttore il tipo di dato che dovrà essere serializzato. Una volta inizializzato il serializer è necessario creare e/o aprire il file in lettura e scrittura, ottenendo il riferimento al solito RandomAccesStream. Arrivati a questo punto, tutto ciò che è sufficiente fare, per completare la serializzazione, è ottenere uno stream per scrivere sul file ed invocare il metodo WriteObject della classe DataContractSerializer.

+ La serializzazione La classe DataContractSerializer salva tutti gli oggetti in XML; per questo motivo, l’estensione scelta per il file è.xml.

+ Serializzazione in JSON Se al posto dell’XML volessimo usare il formato JSON, è sufficiente modificare la seguente istruzione (ed ovviamente l’estensione del file in cui sono salvati i dati):

+ Deserializzazione Per deserializzare le informazioni salvate in precedenza, è sufficiente inizializzare un’istanza della classe DataContractSerializer ed aprire il file in lettura. Dopodichè otteniamo, dal RandomAccessStream, uno stream per leggere dal file, ed infine effettuiamo la deserializzazione delle informazioni, tramite downcast al tipo corretto.