Isolated Storage w Windows Phone 7
Autor: Marcin Kruszyński
Opublikowano: 2011-01-14
W aplikacjach często potrzeba przechowywać dane lokalnie. Szczególne znaczenie ma to w przypadku oprogramowania na urządzeniach mobilnych, gdzie sieć nie zawsze jest dostępna. Obecnie Isolated Storage stanowi jedyny mechanizm przechowywania danych przez aplikacje na telefonie z Windows Phone 7.
Po zapoznaniu się z informacjami zawartymi w tym artykule będziesz:
- wiedział, co to jest Isolated Storage,
- znał różnice między jego implementacjami w Silverlight na WP7 i w wersji desktopowej,
- znał rodzaje danych przechowywane w Isolated Storage i wiedział, jak je zapisywać i odczytywać,
- znał przykłady rozwiązań, które korzystają z Isolated Storage.
Wprowadzenie
Isolated Storage jest to przestrzeń do przechowywania danych używanych przez aplikacje, gdzie operujemy za pomocą wirtualnego systemu plików i mamy zapewnioną izolację. Do danych aplikacji w Isolated Storage nie mają dostępu inne aplikacje. Żadna z aplikacji nie ma też bezpośredniego dostępu do systemu plików w Windows Phone 7. Zapewnia to bezpieczeństwo i chroni przed nieautoryzowanym dostępem do danych czy ich podmianą.
Isolated Storage jest mechanizmem znanym także programistom desktopowego Silverlight i .NET. Implementacja na WP7 w porównaniu z desktopowym Silverlight różni się zasadniczo pod dwoma względami:
- nie są obsługiwane strony, dane są przechowywane jedynie na poziomie aplikacji,
- nie ma quoty na rozmiar na dysku (w wersji desktopowej standardowo 1MB z możliwością zwiększenia, na WP7 standardowy rozmiar równy jest maksymalnemu rozmiarowi aplikacji).
Szczegółowy opis wszystkich różnic znajdziesz w dokumentacji na stronie Differences Between Silverlight and Silverlight for Windows Phone.
**Rys.1. Dane zapisywane w Isolated Storage.
W Isolated Storage aplikacje mogą zapisywać (rys. 1):
- pliki i foldery,
- ustawienia.
Pliki i foldery
W zarządzaniu plikami i folderami w Isolated Storage pomocne są klasy:
- IsolatedStorageFile – reprezentuje przestrzeń Isolated Storage zawierającą pliki i foldery,
- IsolatedFileStream – eksponuje strumień zapewniający dostęp do pliku w Isolated Storage.
Tworzenie folderu i zapisywanie do niego pliku może wyglądać w następujący sposób:
string folderName = "Data";
string fileName = "data-file.txt";
private void SaveString(string data)
{
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!isf.DirectoryExists(folderName))
isf.CreateDirectory(folderName);
string filePath = System.IO.Path.Combine(folderName, fileName);
using (IsolatedStorageFileStream rawStream = isf.CreateFile(filePath))
{
StreamWriter writer = new StreamWriter(rawStream);
writer.WriteLine(data);
writer.Close();
}
}
}
Poprzednio zapisane dane w pliku możemy odczytać za pomocą następującego kodu:
private string LoadString()
{
string result = null;
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
string filePath = System.IO.Path.Combine(folderName, fileName);
if (isf.FileExists(filePath))
{
try
{
using (IsolatedStorageFileStream rawStream = isf.OpenFile(filePath,
System.IO.FileMode.Open))
{
StreamReader reader = new StreamReader(rawStream);
result = reader.ReadLine();
reader.Close();
}
}
catch
{
}
}
}
return result;
}
Ustawienia aplikacji
Za pomocą klasy IsolatedStorageSettings możemy przechowywać w Isolated Storage ustawienia naszych aplikacji w postaci słownika z parami klucz-wartość.
Tu pokażemy, jak można zorganizować sobie zarządzanie ustawieniami aplikacji.
W tym celu napiszmy sobie klasę, która będzie enkapsulować komunikację z Isolated Storage. Dla celów demonstracyjnych dokonujemy zapisu i odczytu jednej logicznej wartości o nazwie LocalizationSetting.
public class AppSettings
{
const string LocalizationSettingKeyName = "LocalizationSetting";
const bool LocalizationSettingDefault = false;
public bool LocalizationSetting
{
get
{
return GetValueOrDefault<bool>(LocalizationSettingKeyName,
LocalizationSettingDefault);
}
set
{
SaveValue(NotificationsSettingKeyName, value);
}
}
}
Kontrolki UI możemy bindować do obiektu tak zdefiniowanej klasy.
W getterach i setterach propercji opakowujących poszczególne ustawienia używamy metod pomocniczych.
Metoda SaveValue dodaje do słownika z ustawieniami nową parę klucz-wartość lub zmienia wartość dla istniejącego klucza, a wprowadzone zmiany zapisuje następnie w Isolated Storage:
public void SaveValue(string key, object value)
{
IsolatedStorageSettings.ApplicationSettings[key] = value;
IsolatedStorageSettings.ApplicationSettings.Save();
}
Za pomocą generycznej metody GetValueOrDefault odczytujemy wartość z Isolated Storage lub zwracamy wartość domyślną w przypadku braku danego klucza w słowniku:
public T GetValueOrDefault<T>(string key, T defaultValue)
{
if (IsolatedStorageSettings.ApplicationSettings.Contains(key))
{
return (T) IsolatedStorageSettings.ApplicationSettings[key];
}
else
return defaultValue;
}
Podane metody do zapisu i odczytu ustawień możemy rozbudować o kod obsługi błędów.
Zastosowanie
Wymienimy tutaj kilka rozwiązań, które swoje działanie opierają na Isolated Storage.
Obecnie Windows Phone 7 nie posiada dedykowanej dla siebie wersji SQL Server Compact Edition. Możemy jednak dane w Isolated Storage zorganizować na wzór lokalnej bazy danych. Na https://www.codeplex.com rozwijane są takie projekty, jak:
- Sterling: IsolatedStorage DataBase in LINQ http://sterling.codeplex.com,
- Windows Phone 7 database http://winphone7db.codeplex.com.
Ostatnio wzrasta znaczenie mechanizmu synchronizacji w związku z upowszechnianiem się urządzeń mobilnych i źródeł danych w chmurze. Niekiedy potrzebujemy budować aplikacje offline, które potrafią kontynuować działanie przy braku połączenia z siecią i okresowo synchronizują się z serwerem.
Stosunkowo niedawno został udostępniony Microsoft Sync Framework 4.0 October 2010 CTP bazujący na Sync Framework 2.1. W swoim działaniu wykorzystuje on uniwersalny protokół OData+Sync. W obecnym CTP dane z SQL Server czy SQL Azure mogą być udostępniane przez serwis, który zawiera w sobie całą logikę potrzebną do synchronizacji. Uniezależnia to klienta od konkretnych technologii. W tym CTP możemy budować klientów na platformach Microsoft, takich jak: Silverlight, Windows Phone 7 czy Windows Mobile 6.5, oraz na platformach nie związanych z technologiami Microsoft, np. HTML5 i iphone. W pierwszej odsłonie nowej wersji otrzymujemy narzędzia do szybkiego budowania serwisów oraz klientów w Silverlight 3, 4 i na Windows Phone 7. Przy generowaniu klienta w Silverlight tworzone są pliki encji i kontekstu. Lokalne dane w postaci encji oraz metadane potrzebne do ich synchronizacji przechowywane są w Isolated Storage.
Podsumowanie
W tym artykule omówiliśmy mechanizm Isolated Storage i wiemy już, na czym polega jego działanie. Znamy różnice w jego implementacji między Silverlight w wersji desktopowej i na Windows Phone 7. Potrafimy odczytywać i zapisywać w Isolated Storage pliki oraz ustawienia aplikacji. Znamy też przykłady rozwiązań, w których Isolated Storage znalazł zastosowanie.
Marcin Kruszyński
Absolwent wydziału EAIE Akademii Górniczo-Hutniczej w Krakowie na kierunku Informatyka. Technologiami Microsoft zajmuje się od sześciu lat. Pracuje w firmie ComArch, gdzie tworzy rozwiązania oparte na platformie .NET i Silverlight. Od dwóch lat jest architektem w centrum badawczo-rozwojowym. Wcześniej zajmował się utrzymaniem oraz rozwojem aplikacji webowych w systemie EDI dla dużych sieci handlowych. Interesuje się wieloma aspektami platformy .NET od pierwszej wersji. Obecnie specjalizuje się w implementacji bogatych interfejsów graficznych aplikacji w oparciu o Silverlight desktop i mobilne i WPF, których rozwój śledzi od początku ich istnienia. Sporo uwagi poświęca też platformie WCF RIA Services. Jest pasjonatem nowych trendów i technologii zwłaszcza w wydaniach CTP i beta, których poznawaniem zajmuje się hobbystycznie i zawodowo. Prelegent grup społecznościowych. Prowadził warsztaty z Silverlight w Krakowie KGD.NET i Wrocławiu PGS. Prezentował tworzenie aplikacji w Silverlight na Windows Phone 7 na Visual Studio 2010 Community Launch we Wrocławiu i Krakowie. Pełnił funkcję eksperta w strefie Ask The Expert ATE technologii Windows Phone na konferencji Microsoft Technology Summit MTS 2010.
Blogi: http://www.marcinkruszynski.blogspot.com, http://www.martinkruszynski.blogspot.com