ASP.Net  »  Articoli  »  Silverlight 

Windows Phone 7: API e feature del telefono

di: Roberto Brunetti     30 Giugno 2010

Isolated Storage

L'unico store disponibile, vista l'assenza in questa prima versione, di SQL Compact Edition (che in realtà è presente sul device ma non accessibile dal codice della sandbox) è l'Isolated Storage ben conosciuto a chi sviluppa applicazioni Silverlight.

Diversamente da "Silverlight Web", l'isolated storage non ha limiti sulla dimensione quindi abbiamo a disposizione tutto lo spazio disponibile sul device.

L'Isolated Storage divide lo spazio disco in spazi isolati per ogni applicazione: è impossibile accedere all'isolated storage di un'altra applicazione tramite le API, così come è impossibile accedere al file system del device da una applicazione: questo spazio può essere considerato quindi sicuro rispetto ad accessi indesiderati. Lo spazio viene creato all'installazione dell'applicazione e viene eliminato alla sua disinstallazione da parte dell'utente.

Le API messe a disposizione consentono di sfruttare lo storage in due diverse modalità: la prima per memorizzare file, dati, media e così via, la seconda per memorizzare le impostazioni delle applicazioni. Qualche riga di codice vale più di mille parole. Le righe di codice sono pilotate dalla seguente user interface:

Figura 4. Interfaccia utente per testare l'isolated storage
(clic per ingrandire)

Interfaccia utente per testare l'isolated storage

Lasciando i nomi dei controlli ai valori di default, questo il codice per scrivere (button1_Click) un file nell'Isolated Storage e per leggere (button2_Click) il file appena creato.

public partial class MainPage : PhoneApplicationPage
{
  public MainPage()
  {
    InitializeComponent();
    SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;
  }
  
  private button1_Click(Object sender, RoutedEventArgs e)
  {
    IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
	
    myStore.CreateDirectory("RootFolder");
	
    StreamWriter writeFile = new StreamWriter(
      new IsolatedStorageFileStream("RootFolder\\myFile.txt", FileMode.OpenOrCreate, myStore));
	  
    writeFile.WriteLine(textBox1.Text);
    writeFile.Close();
    writeFile.Dispose();
  }
  
  private button2_Click(Object sender, RoutedEventArgs e)
  {
    IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
	
    StreamReader readFile = new StreamReader(
      new IsolatedStorageFileStream("RootFolder\\myFile.txt", FileMode.Open, myStore));
    
    string fileText = readFile.ReadLine();
	  
    textBox1.Text = fileText;
    writeFile.Close();
    writeFile.Dispose();
  }
  
}

La prima operazione da eseguire è ottenere un riferimento allo store tramite il metodo statico GetUserStoreForApplication; il risultato è appunto una istanza di tipo IsolatedStorageFile, che, a discapito del nome, rappresenta lo storage dove poter memorizzare file e directory.

La riga successiva infatti crea una directory denominata RootFolder in cui inserire un file, tramite un IsolatedStorageFileStream. Nel nostro caso stiamo creando (o riaprendo se già esiste) un file denominato myFile.txt dove eseguire una WriteLine del contenuto del textbox (TextBox1).

Il codice per rileggere il contenuto del file prevede le stesse operazioni utilizzando uno StreamReader al posto dello StreamWriter. In questo caso eseguiamo un ReadLine per valorizzare poi il TextBlock presente sulla page.

Oltre allo spazio per salvare manualmente elementi, l'Isolated Storage consente di salvare impostazioni applicative senza bisogno di definire un file flat e il codice per impacchettare e spachettare le informazioni. Il terzo e quarto pulsante della page precedente gestiscono queste operazioni:

  private button4_Click(Object sender, RoutedEventArgs e)
  {
    textBox2.Text = IsolatedStorageSettings.ApplicationSettings["Data"].ToString();
  }
  
  private button3_Click(Object sender, RoutedEventArgs e)
  {
    IsolatedStorageSettings.ApplicationSettings["Data"] = DateTime.Now.ToString();
	
	// N.B. Save automatico quando si chiude l'applicazione
	// se stateless è bene salvare subito
	IsolatedStorageSettings.ApplicationSettings.Save();
  }
  
}

Nel nostro esempio è presente una nota che apre una discussione sulla modalità con cui girano le applicazioni in foreground rispetto all'attivazione di Chooser e Launcher, rispetto all'apertura di nuove applicazioni e rispetto all'arrivo di richieste da parte del sistema, discussione che richiede un articolo separato. È comunque buona norma persistere le informazioni a fronte di una modifica alle impostazioni stesse.

Per quanto riguarda la connettività verso servizi, è disponibile un subset di WCF allineato a quanto conosciamo con Silverlight 3: importante sottolineare come l'accesso ai servizi sia asincrono per definizione e consenta chiamate SOAP, REST e JSON verso i servizi.

Guide ASP.Net

Guida Windows Azure Code Snippets

Le migliori pratiche per far girare le applicazioni "in the cloud",...

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto