Windows Phone 7 开发 31 日谈——第15日:独立存储
第15日。
昨天,我们讨论了程序中的墓碑机制从而让程序看起来是可以在后台运行的。今天,我们来谈谈在电话中存储本地数据的一种非常棒的方法。使用独立存储。
什么是独立存储?
独立存储不是一个新概念。在Silverlight 2中已经在使用了。本质上说这是一种在本地文件系统中存储数据或文件的方式。“独立(isolated)”是因为只有你的程序才可以访问这些数据。如果你有两个应用程序,同时你想在它们之间共享数据的话,最好使用一些类似基于云的可以让你共享数据的服务。一个应用程序不能共享,调用设备上其他的应用程序或与之进行交互。
设置和文件
有两种方式在本地存储你的数据。第一是通过库中的键/值对,叫做IsolatedStorageSettings。第二是通过创建真实的文件和目录,叫做IsolatedStorageFile。下图简要介绍了这些(由MSDN提供),我会为每种方式提供一个深入的例子。
IsolatedStorageSettings
有很多时候,这可能是你需要的唯一存储方式。IsolatedStorageSettings允许你在一个字典中存储键/值对(注意,无需任何设定),然后再读取出来。这些数据会一直保存着,无论应用程序停止/启动,或者关机等等。除非你删除它,或者用户卸载你的应用程序,否则它一直存在。要记住的一点是在它被添加到字典中之前你无法读取它。在我的每个例子中,你都会看到在读取数据之前检查值是否它存在的代码。下面的例子是在用户在你的程序中接收电子邮件更新时需要保存用户设定的代码。我用了一个多选框允许用户选择,还有一个将此值保存到独立存储中的事件
。
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.IO.IsolatedStorage;
namespace Day15_IsolatedStorage
{
public partial class MainPage : PhoneApplicationPage
{
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
// Constructor
public MainPage()
{
InitializeComponent();
InitializeSettings();
}
private void InitializeSettings()
{
if (settings.Contains("emailFlag"))
{
EmailFlag.IsChecked = (bool)settings["emailFlag"];
}
else settings.Add("emailFlag", false);
}
private void EmailFlag_Unchecked(object sender, RoutedEventArgs e)
{
settings["emailFlag"] = false;
}
private void EmailFlag_Checked(object sender, RoutedEventArgs e)
{
settings["emailFlag"] = true;
}
}
}
正如你所见,这非常简单。请记住以下内容:
如果还没在IsolatedStorageSettings中创建就读取它的值会抛出一个异常。确认你已经初始化了设置,或者总是使用Contains方法先检查一下。
你可以在设置中保存任意内容。在我的例子中,我保存了一个布尔值,但你可以保存一个客户对象,或者任何你能想到的。
记住当你读取数据时你需要将它显示强制转换。你会看到我在使用之前将数据转换为bo
补充:移动开发 , Windows Phone ,