Windows Phone 7 - 獨立存儲空間
在Android 里面我們要快速保存用戶的設置或者游戲進行的數據,我們通常全使用SharePreference 這個類來進行操作,另外Android 還提供了一系列繼承自SharePreference 的組件提供我們快速保存用戶的設置項。那么在Windows Phone 7 提供了什么樣的機制提供用戶快速保存數據呢?微軟使用了一個叫IsolatedStorageSettings 的類庫提供給開發人員快速的使用獨立存儲保存用戶數據的功能,但總體使用感覺來說沒有Android 使用的方便,另外Andriod 的類似這種數據存儲是暴露給用戶的,而Windows Phone 7 的這種存儲機制則是嚴格控制,我們開發人員也不知道其具體存放位置。本篇的學習筆記,我利用Android 的存儲特色使用Windows Phone 7 的 IsolatedStorageSettings 類模仿了一個類似 Android 存儲機制的DEMO,希望這個小DEMO能對你有所幫助,下面先給出效果圖:
首次進入頁面時,界面放置了一個 TextBlock 控件和一個導航的按鈕,點擊導航按鈕進入配置界面,如下圖:
如上圖,圖中有一系列組件,可以設置第一幅圖的TextBlock 的字體大小和字體需要顯示的顏色,選擇紅色并且改變字體大小為32,然后點擊Back 鍵退回來,顯示效果如下:
雖說這是一個非常簡單的DEMO,但Windows Phone 7的IsolatedStorageSettings 在這個DEMO中的使用是比較全面的,下面給出代碼示意:
首先,mainPage 界面的CS代碼
public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); }void MainPage_Loaded(object sender, RoutedEventArgs e) { if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textColor)) { int colorInt = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textColor].ToString()); SolidColorBrush scb=null; switch (colorInt) { case 0: scb = new SolidColorBrush(Colors.White); break; case 1: scb = new SolidColorBrush(Colors.Red); break; case 2: scb = new SolidColorBrush(Colors.Green); break; case 3: scb = new SolidColorBrush(Colors.Blue); break; } setTextBlock.Foreground = scb; }if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textSize)) { int textSize = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textSize].ToString()); setTextBlock.FontSize = textSize; } }private void navigateionBtn_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/Set.xaml“,UriKind.RelativeOrAbsolute)); }
當界面加載時,讀取配置信息并修改TextBlock 對應的值。進入配置頁面時稍顯復雜,考慮到不需要用戶點確認就可以保存數據,這里使用的導航進來和導航出去兩種寫法,代碼如下:
public partial class Set : PhoneApplicationPage {int textColor; int textSize; public Set() { InitializeComponent(); this.Loaded += new RoutedEventHandler(Set_Loaded); }void Set_Loaded(object sender, RoutedEventArgs e) { switch (textColor) { case 0: whiteRadioButton.IsChecked = true; break; case 1: redRadioButton.IsChecked = true; break; case 2: greenRadioButton.IsChecked = true; break; case 3: blueRadioButton.IsChecked = true; break; } textSizeTextBox.Text = textSize.ToString(); }private int colorInt = -1; protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { if (whiteRadioButton.IsChecked==true) { colorInt = 0; } else if (redRadioButton.IsChecked==true) { colorInt = 1; } else if (greenRadioButton.IsChecked==true) { colorInt = 2; } else if (blueRadioButton.IsChecked==true) { colorInt = 3; }= colorInt;= Int32.Parse(textSizeTextBox.Text); IsolatedStorageSettings.ApplicationSettings.Save();base.OnNavigatedFrom(e); }protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textColor)) { textColor = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textColor].ToString()); } if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textSize)) { textSize = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textSize].ToString()); } base.OnNavigatedTo(e); } } IsolatedStorageSettings.ApplicationSettings[App.textColor] IsolatedStorageSettings.ApplicationSettings[App.textSize]
導航進來時,為變量賦值,并在加載完成后改變控件的內容和狀態,如上圖的TextBox 的文本值和RadioButton的選中項。
導航出去時,保存用戶的選擇行為。
Tip:IsolatedStorageSettings.ApplicationSettings 這個 Ditonary 的Value 是一個 Object ,亦就是您可以將你的一個Model 對象保存進來亦可,它內部會幫你序列化。
另外,如果你習慣使用IO流寫文件操作,下篇文章會講述到使用IO流寫文件的方式存儲空間的方法,希望 留意。
源碼下載:存儲空間DEMO