文档章节

【万里征程——Windows App开发】如何保存、读取、删除应用数据

NoMasp
 NoMasp
发布于 2015/09/08 21:48
字数 1287
阅读 1
收藏 0

在前面的几篇博客中,都是关于数据的,这方面的内容其实还有很多很多,省略掉一部分后,也还是有很多。这一篇将是很重要的一部分,关于保存和读取数据,对于游戏而言,这一点尤其重要。

先来看看一个大概的背景吧,我这里写的很简单啦^_^

这里写图片描述

保存的内容就是这四个框框里填写的数据咯。先上XAML代码。

   <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
            <StackPanel Orientation="Vertical">
                <Rectangle Name="recRed" Width="200" Height="200" Fill="Red"/>
                <Rectangle Name="recGreen" Width="100" Height="400" Fill="Green"/>
            </StackPanel>
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal">
                    <StackPanel Orientation="Vertical">
                        <TextBlock Text="红色矩形的长" FontSize="25" Margin="12" Width="150" Height="50" />
                        <TextBlock Text="红色矩形的宽" FontSize="25" Margin="12" Width="150" Height="50" />
                        <TextBlock Text="绿色矩形的长" FontSize="25" Margin="12" Width="150" Height="50" />
                        <TextBlock Text="绿色矩形的宽" FontSize="25" Margin="12" Width="150" Height="50" />
                    </StackPanel>
                    <StackPanel Orientation="Vertical">
                        <TextBox Name="tBoxRedHeight" FontSize="25" Width="150" Height="50" Margin="12"/>
                        <TextBox Name="tBoxRedWidth" FontSize="25" Width="150" Height="50" Margin="12"/>
                        <TextBox Name="tBoxGreenHeight" FontSize="25" Width="150" Height="50" Margin="12" />
                        <TextBox Name="tBoxGreenWidth" FontSize="25" Width="150" Height="50" Margin="12" />
                    </StackPanel>
                </StackPanel>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                    <Button Width="150" Height="70" Name="btnSaveAppData" Click="btnSaveAppData_Click" Content="保存应用数据"/>
                    <Button Width="150" Height="70" Name="btnReadAppData" Click="btnReadAppData_Click" Content="读取应用数据"/>
                </StackPanel>
            </StackPanel>                
        </StackPanel>              
    </Grid>

单个设置

先来看看单个设置呗,下面就是代码咯。

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
public MainPage()
{
     this.InitializeComponent();
}
private void btnSaveAppData_Click(object sender, RoutedEventArgs e)
{                              
    localSettings.Values["RectangleRedHeight"] = tBoxRedHeight.Text;
    localSettings.Values["RectangleRedWidth"] = tBoxRedWidth.Text;
    localSettings.Values["RectangleGreenHeight"] = tBoxGreenHeight.Text;
    localSettings.Values["RectangleGreenWidth"] = tBoxGreenWidth.Text;
}

private void btnReadAppData_Click(object sender, RoutedEventArgs e)
{
     Object objRectangleRedHeight = localSettings.Values["RectangleRedHeight"];
     Object objRectangleRedWidth = localSettings.Values["RectangleRedWidth"];
     Object objRectangleGreenHeight = localSettings.Values["RectangleGreenHeight"];
     Object objRectangleGreenWidth = localSettings.Values["RectangleGreenWidth"];

     recRed.Height = double.Parse(objRectangleRedHeight.ToString()); 
     recRed.Width = double.Parse(objRectangleRedWidth.ToString()); 
     recGreen.Height = double.Parse(objRectangleGreenHeight.ToString());
     recGreen.Width = double.Parse(objRectangleGreenWidth.ToString()); 
}

首先定义了两个全局变量,如果看过前面几篇文章,这个应该就非常清楚了。顾名思义,第一个是用来保存本地设置的,第二个则是用来访问本地文件夹的。这里是单个设置地进行保存的,后面还有2种方式。那么就来调试吧,注意在点击了保存数据按钮之后把App关掉哦,关掉之后再加载,这样才算是保存了应用数据嘛,你说对不对呢?

以下就是我的测试结果了。

这里写图片描述

复合设置

我们的设计都不用变,后台代码修改如下。

       Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        public MainPage()
        {
            this.InitializeComponent();
        }
        private void btnSaveAppData_Click(object sender, RoutedEventArgs e)
        {
            Windows.Storage.ApplicationDataCompositeValue compositeSettings = new ApplicationDataCompositeValue();

            compositeSettings["RectangleRedHeight"] = tBoxRedHeight.Text;
            compositeSettings["RectangleRedWidth"] = tBoxRedWidth.Text;
            compositeSettings["RectangleGreenHeight"] = tBoxGreenHeight.Text;
            compositeSettings["RectangleGreenWidth"] = tBoxGreenWidth.Text; 

            localSettings.Values["RectangleSettings"] = compositeSettings; 
        }
        private async void btnReadAppData_Click(object sender, RoutedEventArgs e)
        {
            Windows.Storage.ApplicationDataCompositeValue compositeSettings =  
                (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["RectangleSettings"];

            if (compositeSettings == null)
            {
                Windows.UI.Popups.MessageDialog messageDialog =   
                    new Windows.UI.Popups.MessageDialog("你好像没有保存任何应用数据哦!");
                await messageDialog.ShowAsync();
            }
            else
            {
                recRed.Height = double.Parse(compositeSettings["RectangleRedHeight"].ToString());
                recRed.Width = double.Parse(compositeSettings["RectangleRedWidth"].ToString());
                recGreen.Height = double.Parse(compositeSettings["RectangleGreenHeight"].ToString());
                recGreen.Width = double.Parse(compositeSettings["RectangleGreenWidth"].ToString()); 
            }  
        }

使用ApplicationDataCompositeValue 会创建一个复合设置,通过代码所示方式即可添加数据,最后会将其添加到localSettings中。

读取数据的时候,同样是先在localSettings中通过键值对的方式来取出这个复合设置。如果该设置为空,就会调用MessageDialog控件弹窗通知没有保存数据。对于这个控件,可以访问这里:【万里征程——Windows App开发】控件大集合2。如果复合设置存在则将他们分别进行类型转换后复制给相应的矩形的属性。

在容器中存放数据

在容器存放数据其实也就这么回事啦,无非就是先创建一个容器,然后如果创建成功了,就在其中添加相应的数据即可。

至于加载数据,在这里我使用了一个bool变量来检查容器是不是已经创建好了,如果创建好了就可以将相应的数据取出然后赋值了,如果没有的话则一样挑出弹窗。

        Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        public MainPage()
        {
            this.InitializeComponent();
        }
        private void btnSaveAppData_Click(object sender, RoutedEventArgs e)
        {    
            Windows.Storage.ApplicationDataContainer containerSettings =
                localSettings.CreateContainer("RecSettingsContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);
            if (localSettings.Containers.ContainsKey("RecSettingsContainer"))
            {
                localSettings.Containers["RecSettingsContainer"].Values["RectangleRedHeight"] = tBoxRedHeight.Text;
                localSettings.Containers["RecSettingsContainer"].Values["RectangleRedWidth"] = tBoxRedWidth.Text;
                localSettings.Containers["RecSettingsContainer"].Values["RectangleGreenHeight"] = tBoxGreenHeight.Text;
                localSettings.Containers["RecSettingsContainer"].Values["RectangleGreenWidth"] = tBoxGreenWidth.Text;
            }
        }
        private async void btnReadAppData_Click(object sender, RoutedEventArgs e)
        {      
            bool hasContainerSettings = localSettings.Containers.ContainsKey("RecSettingsContainer");
            if(hasContainerSettings)
            {       
                recRed.Height = double.Parse(localSettings.Containers["RecSettingsContainer"].Values["RectangleRedHeight"].ToString());
                recRed.Width = double.Parse(localSettings.Containers["RecSettingsContainer"].Values["RectangleRedWidth"].ToString());
                recGreen.Height = double.Parse(localSettings.Containers["RecSettingsContainer"].Values["RectangleGreenHeight"].ToString());
                recGreen.Width = double.Parse(localSettings.Containers["RecSettingsContainer"].Values["RectangleGreenWidth"].ToString());
            }
            else
            {
                Windows.UI.Popups.MessageDialog messageDialog =
                    new Windows.UI.Popups.MessageDialog("你好像没有保存任何应用数据哦!");
                await messageDialog.ShowAsync();
            }         
        }

接下来就来个运行的截图咯,还有弹框的截图^_^

这里写图片描述

这里写图片描述

删除数据

1.对于单个设置和复合设置

localSettings.Values.Remove("compositeSettings");

2.对于复合数据

localSettings.DeleteContainer("containerSettings");

删除并不难,或者说,这一节都不难。有了这些,我们在做游戏的时候,就可以将用户对游戏的设置都保存下来啦。

那么这一篇博文就结束咯,感谢大家的支持!

补充一个插曲哈,刚才准备写完了就保存发表的,然后就点了右上角的“关闭”……

这里写图片描述



感谢您的访问,希望对您有所帮助。

欢迎大家关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

本文转载自:http://blog.csdn.net/nomasp/article/details/45079611

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
nomasp 博客导读:Lisp/Emacs、Algorithm、Android

版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/44966625 Profile Introduction to Blog 您能看到这篇博客导读...

nomasp
2015/09/17
0
0
浙江万里学院-阿里云大数据应用学院2018级新生开学典礼隆重举行

2018年10月11日,由浙江万里学院、阿里云、慧科集团三方共建的阿里云大数据应用学院2018级新生开学典礼在浙江万里学院隆重举行。浙江万里学院阿里云大数据应用学院不仅是浙江省首个,也是目前...

昕华
2018/10/12
0
0
ios应用数据存储的常用方式与沙盒

ios应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 沙盒: 每个 iOS 应用都有自己的应用沙盒 ( 应用沙盒就是文...

业界小白
2016/12/06
26
0
用WijmoJS玩转您的Web应用 —— Ionic

前言: 在本文中,我们将着重介绍如何将WijmoJS与Ionic一起使用,来创建一款移动端支持优先、快捷高效的应用程序。在之前的文章中,我们已经介绍了使用WijmoJS与Angular、React、Vue三大框架...

葡萄城控件技术团队
2018/06/26
25
0
【云周刊】第196期:阿里云机器智能首席科学家闵万里:数据升维和智能降维,打造智能工业互联网平台

本期头条 阿里云机器智能首席科学家闵万里:数据升维和智能降维,打造智能工业互联网平台 在过去的一年时间里,阿里云ET工业大脑已经服务协鑫光伏、中策橡胶、正泰新能源、攀钢集团等数十个工...

场景研读
2018/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部