12、保存用户数据
应用状态:运行、挂起、结束
在 挂起 状态下保存数据
方案:(创建基础页,在基础页中有Common文件)
1)使用微软提供的Commom文件中的类:SuspensionManger和NavigaHelper(从第三方提供的类来完成)
SuspensionManager方法:
保存->
a.打开App.xaml.cs文件,在Onlaunched事件方法中找到创建Frame的代码
b.添加注册SuspensionManager的代码,注册这个方法就是告诉在挂起时有一个缓存可以缓存数据
...OnLaunched..
{
...
if(tootFrame==null)
{
rootFrame= new Frame();
//添加注册SuspensionManager(导入命名空间)
SuspensionManager.RegisterFrame(rootFrame,"appFrame");
}
}
c.找到OnSuspending事件处理函数,加上一个保存数据的代码
awaitSuspensionManager.SaveAsync();//保存数据代码
程序再次运行时加载数据->
...OnLaunched..
{
//TODO:从之前的挂起的应用程序加载状态
//添加从保存的数据恢复数据的代码
awaitSuspensionManager.RestoreAsync();
}
2)NavigationHelper中Save-Load方法(需要SuspensionManger作为支撑)
保存->
a.转到1)中的b步骤
添加注册SuspensionManager的代码,注册这个方法就是告诉在挂起时有一个缓存可以缓存数据
...OnLaunched..
{
...
FramerootFrame = Window.Current.Content as Frame;
//添加注册SuspensionManager(导入命名空间)的代码
SuspensionManager.RegisterFrame(rootFrame,"appFrame");
...
}
privatevoid NavigationgHelper_SaveState(Object sender,SaveStateEvent)
{
//使用这个SaveState保存数据就看这个参数
e.PageState.Add("txt",txt.Text);//在设计器中的一个<TextBox x:Name="txt"/>
}
b.找到OnSuspending方法
privatevoid OnSuspending(object sender, SuspendingEventArgs e)
{
vardeferral = e.SuspendingOperation.GetDeferral();
// TODO: 保存应用程序状态并停止任何后台活动
SuspensionManager.SaveAsync();//用于保存数据的代码(添加)
deferral.Complete();
}
加载数据->
a.
...OnLaunched..
{
//TODO:从之前的挂起的应用程序加载状态
//添加从保存的数据恢复数据的代码
awaitSuspensionManager.RestoreAsync();
}
b.
privatevoid NavigationHelper_LoadState(..)
{
if(e.PageState!=null&&e.PageState.ContainsKey("txt"))
{
txt.Text=e.PageState["txt"]as string;
}
else
{
await new MessageDialog("没有数据").ShowAsync();
}
}
3)使用数据存储(推荐做法!)
Windows.Storage.ApplicationData.Current.LoacalSettings
a.现在设计器中创建一个<TextBoxx:Name="txt" TextChanged="TextBox_TextChanged"/>
//TextBox中的文本变化事件
private void TextBox_TextChanged(...)
{
//保存数据
ApplicationData.Current.LoacalSettings.Values["txt"]=txt.Text;
//如果有多台win设备,可以通过win账户使数据共享
//ApplicationData.Current.RoamingSettings.Values[]
}
b.
private void NavigationHelper_LoadState(..)
{
//添加加载数据函数
stringstr = ApplicationData.Current.LoacalSettings.Values["txt"];
if(str==null)
{
await new MessageDialog("没有数据").ShowAsync();
}
else
{
txt.Text= str;
}
}