使用独立存储开发Windows Phone 7应用程序
创始人
2024-07-18 12:40:42
0

前不久我们讲过".NET平台开发Windows Phone 7、iPhone及Android应用",在新的更新包内微软给Windows Phone 7增加了一项独立存储的概念,就是在移动智能设备中存储本地数据的方法。

什么是独立存储?

独立存储不是一个新概念。在Silverlight 2中已经在使用了。本质上说这是一种在本地文件系统中存储数据或文件的方式。“独立(isolated)”是因为只有你的程序才可以访问这些数据。如果你有两个应用程序,同时你想在它们之间共享数据的话,***使用一些类似基于云的可以让你共享数据的服务。一个应用程序不能共享,调用设备上其他的应用程序或与之进行交互。 在文件的存储上,MonoTouch和MonoDroid可以直接像本地路径写入数据,而在Windows Phone 7上则必须使用独立存储:

  1.     void SaveLocal(string data)    
  2.     {    
  3. #if (MonoTouch || MonoDroid)    
  4.         File.WriteAllText(_localPath, data);    
  5. #elif WINDOWS_PHONE    
  6.         using (var appStorage =     
  7.             IsolatedStorageFile.GetUserStoreForApplication())    
  8.         {    
  9.             var file = appStorage.OpenFile(_localPath, FileMode.Create);    
  10.             FileExtension.WriteAllText(file, data);    
  11.         }    
  12. #endif    
  13.     }    
  14.  

设置和文件

有两种方式在本地存储你的数据。***是通过库中的键/值对,叫做IsolatedStorageSettings。第二是通过创建真实的文件和目录,叫做IsolatedStorageFile。下图简要介绍了这些(由MSDN提供),我会为每种方式提供一个深入的例子。

使用独立存储开发Windows Phone 7应用程序
IsolatedStorageSettings

有很多时候,这可能是你需要的唯一存储方式。IsolatedStorageSettings允许你在一个字典中存储键/值对(注意,无需任何设定),然后再读取出来。这些数据会一直保存着,无论应用程序停止/启动,或者关机等等。除非你删除它,或者用户卸载你的应用程序,否则它一直存在。要记住的一点是在它被添加到字典中之前你无法读取它。在我的每个例子中,你都会看到在读取数据之前检查值是否它存在的代码。下面的例子是在用户在你的程序中接收电子邮件更新时需要保存用户设定的代码。我用了一个多选框允许用户选择,还有一个将此值保存到独立存储中的事件。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12. using Microsoft.Phone.Controls;  
  13. using System.IO.IsolatedStorage;  
  14.  
  15. namespace Day15_IsolatedStorage  
  16. {  
  17.     public partial class MainPage : PhoneApplicationPage  
  18.     {  
  19.         IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;  
  20.           
  21.         // Constructor  
  22.         public MainPage()  
  23.         {  
  24.             InitializeComponent();  
  25.             InitializeSettings();  
  26.         }  
  27.  
  28.         private void InitializeSettings()  
  29.         {  
  30.             if (settings.Contains("emailFlag"))  
  31.             {  
  32.                 EmailFlag.IsChecked = (bool)settings["emailFlag"];  
  33.             }  
  34.             else settings.Add("emailFlag", false);  
  35.         }  
  36.  
  37.         private void EmailFlag_Unchecked(object sender, RoutedEventArgs e)  
  38.         {  
  39.             settings["emailFlag"] = false;  
  40.         }  
  41.  
  42.         private void EmailFlag_Checked(object sender, RoutedEventArgs e)  
  43.         {  
  44.             settings["emailFlag"] = true;  
  45.         }  
  46.     }  
  47. }  
  48.  

正如你所见,这非常简单。请记住以下内容:

如果还没在IsolatedStorageSettings中创建就读取它的值会抛出一个异常。确认你已经初始化了设置,或者总是使用Contains方法先检查一下。

你可以在设置中保存任意内容。在我的例子中,我保存了一个布尔值,但你可以保存一个客户对象,或者任何你能想到的。

记住当你读取数据时你需要将它显示强制转换。你会看到我在使用之前将数据转换为bool值。虽然你保存了对象,但并没有保存它的类型。是否能看到类型取决于你自己。

设置一个值和在库中添加它效果是一样。“settings.Add()”的语句实际上不是必需的,我添加它是为了让你看清语法。

就这些。IsolatedStorageSettings非常简单。只用极少的代码就可保存键/值对。创建和保存文件相对略复杂一些,但还是十分简单。

IsolatedStorageFile

使用IsolatedStorageFile是一种让你可以在用户的设备中存储真实文件的机制。在我的例子中,在一个子目录中创建了一个文本文件,并读取文件中的内容。我们还可以创建和删除目录,子目录及文件。看起来有很多代码,但实际上非常简单。我们创建一个新的IsolatedStorageFile对象,并使用一个IsolatedStorageFileStream对象将它写入到驱动器中。我在代码中加入了注释,这样你可以更清楚地看到发生了什么。有两个事件处理程序,一个用来保存文件,另一个读取:

  1. using System.IO.IsolatedStorage;  
  2. using System.IO;  
  3.  
  4. private void SaveButton_Click(object sender, RoutedEventArgs e)  
  5. {  
  6.     //Obtain a virtual store for application  
  7.     IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();  
  8.  
  9.     //Create new subdirectory  
  10.     fileStorage.CreateDirectory("textFiles");  
  11.  
  12.     //Create a new StreamWriter, to write the file to the specified location.  
  13.     StreamWriter fileWriter = new StreamWriter(new IsolatedStorageFileStream("textFiles\\newText.txt", FileMode.OpenOrCreate, fileStorage));  
  14.     //Write the contents of our TextBox to the file.  
  15.     fileWriter.WriteLine(writeText.Text);  
  16.     //Close the StreamWriter.  
  17.     fileWriter.Close();  
  18. }  
  19.  
  20. private void GetButton_Click(object sender, RoutedEventArgs e)  
  21. {  
  22.     //Obtain a virtual store for application  
  23.     IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();  
  24.     //Create a new StreamReader  
  25.     StreamReader fileReader = null;  
  26.  
  27.     try  
  28.     {  
  29.         //Read the file from the specified location.  
  30.         fileReader = new StreamReader(new IsolatedStorageFileStream("textFiles\\newText.txt", FileMode.Open, fileStorage));  
  31.         //Read the contents of the file (the only line we created).  
  32.         string textFile = fileReader.ReadLine();  
  33.  
  34.         //Write the contents of the file to the TextBlock on the page.  
  35.         viewText.Text = textFile;  
  36.         fileReader.Close();  
  37.     }  
  38.     catch  
  39.     {  
  40.         //If they click the view button first, we need to handle the fact that the file hasn't been created yet.  
  41.         viewText.Text = "Need to create directory and the file first.";  
  42.     }  
  43. }  
  44.  

离开程序时这多像一个迷人的魔术,再回来时,会再次载入文件(它还在那儿!)。

你都知道了。现在我们在Windows Phone 7中有两种存储机制可以用。IsolatedStorageSettings和IsolatedStorageFile。我们非常希意听到你在程序中使用这两种存储结构的创新用法,与我们一同分享。

【编辑推荐】

  1. .NET平台开发Windows Phone 7、iPhone及Android应用
  2. 简述Windows Phone 7应用程序开发平台
  3. Windows Phone 7对比Android 平分秋色
  4. 多图详解 Windows Phone 7功能升级过程
  5. Windows Phone 7开发工具发布更新包 附下载地址

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...