Windows Phone 8.1中应用数据之应用设置

来源:互联网 发布:兔先森质量 知乎 编辑:程序博客网 时间:2024/06/05 19:08

最近正好有机会看到林政老师的Windows Phone 8,1的书,正好我平时都是基于用户控件之类的写写使用收获,虽然

编程中基本上都用过应用数据之类的知识,但是一直没整理过,知识越来越多,东西也越来越杂,有时候过个几天不

用,嘟嘟...就忘了,好记性不如烂笔头,正好趁着最近心情不爽,给自己放个假,有点时间,就把自己学习中的一些

收获记录下来,大家互相学习。


应用都有自己的应用数据,Windows Phone应用数据都是存储在手机客户端,分为应用设置和应用文件。

应用设置用于存储少量数据,并且这些数据都是简单的数据类型,如布尔型,整形,字符等等,并不能支持像List对

象的数据,一般不支持的数据可以使用应用文件存储或者将其转化成Xml,Json数据,作为字符串存储。

应用文件是以文件的形式存储数据。


应用设置存储是保存在应用程序存储区中的键值对的字典集合,它会自动负责序列化对象,并及那个其保存在应用程

序里面。以键值对的方式提供一种快速数据访问方式,主要用于存储一些应用设置信息。

应用设置拥有容器的层次结构,应用设置信息都存储在一个容器中,并且还可以在其中添加数据和新容器,容器可以

一层层的嵌套下去,最多嵌套32层。


应用设置存储分为本地和漫游两种设置类型。前者只会存在于当前的客户端应用程序里,而后者会将数据同步到其他

的设备具有相同账号的客户端里。本地应用设置是在根容器ApplicationData.Current.LocalSettings下面,而漫游应

用设置是在根容器ApplicationData.Current.RoamingSettings下面,只是存储根目录不一样,其他API操作都是完

全一样的。


一旦涉及到数据了,难免有数据的增删查改操作。

首先呢,要认识ApplicationData类,一个应用程序只有一个ApplicationData对象。

ApplicationData类:应用程序的数据类--包括应用设置信息和应用文件信息

LocalSettings属性:获取本地根容器

RoamingSettings属性:获取漫游根容器

获取到的应用设置的容器对象(ApplicationDataContainer),所有的操作都是从这个容器对象开始的。


1. 添加和修改应用设置

首先获取本地应用设置:

ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Currrent.LocalSettings;

获取容器对象之后,就可以通过键值对的方式来操作应用设置,可以使用ApplicationDataContainer.Values属性来

访问容器中的数据或者设置容器数据。如下:

localSettings.values["test"]="testData";

如上代码,如果容器中原本不存在test键,则就为容器新建这个键,并赋予值;如果本身就存在这个test键,那么就

会将原先的覆盖修改掉。


2. 判断应用设置中是否存在某个键的情形:

bool isKeyExists = localSettings.Values.ContainsKey("test");

如果存在则为true;如果不存在,则为false。


3. 读取应用设置中的数据:

string data = localSettings.Values["test"].ToString();

当然这边读取之前,最好用第2点对这个键进行存在性的判断。


4. 删除应用设置中的数据:

localSettings.Values.Remove("test");

我们其实删除的是键,而当键删除掉之后,键对应的值也会被删除。


以上都是建立在localSettings这个根容器中增加删除数据了。正如之前所说的,容器之中依旧可以嵌套容器,嵌套容

器中的数据增加修改删除等等操作和对根容器的数据操作是一致的。

容器的类始终是ApplicationDataContainer。

a. 容器的创建:

ApplicationDataContainer container = localSettings.CreateContainer("testContainer",ApplicationDataCreateDisposition.Always);

CreateContainer的第一个参数是新创建的容器名;第二个参数是ApplicationDataCreateContainer枚举,枚举值为

Always表示如果容器不存在就新建一个容器,再返回容器对象。(因为难免有时候localSettings中已经创建了许多容

器了,如果再创建一个容器,但是容器名与已存在的容器名一致的话就会冲突,所以这个时候可以选择枚举的另外值)

b. 容器的删除:

一个东西被创建出来了,自然有删除的方法。但是要注意,这边不是单纯的删除键值这样,这边删除的是容器,所以

说,容器中原有的一些数据会全部删除掉。所以删除的时候需要考虑容器中的数据是否完全不需要了。

localSettings.DeleteContainer("testContainer");


到此为止,都是以键值对的方式存储数据的,并且前面也已经说了,应用设置存储的数据类型都是简单的数据类型。

但是可不可以将一类的简单类型存放在一起呢。换言之,前面存储的键值对,每一对键值跟其他键值是没有联系的,

所以说能不能将互相依赖的数据捆绑存储起来呢。

ApplicationDataCompositeValue类就解决了这个问题,它可以存储复合设置数据。而它本身内部存储方式也还是

以键值对的方式存储数据。首先创建一个ApplicationDataCompositeValue对象:

ApplicationDataCompositeValue composite = new ApplicationDataCompositeValue();

composite["intValue"] = 6;

composite["doubleValue"] = 8.0;

composite["stringValue"] = "strTest";

.....

这种捆绑存储的方式利于捆绑操作,其目的在于保证这些数据组合的原子更新,复合设置在漫游设置中用的情形比较

多,可以保证在多个设备中同时更新数据的时候这组数据是作为一个原子操作。


推荐链接:博客园客户端(Universal App)开发随笔 - 应用漫游数据(roaming)

最后在推荐一下微软官方对于应用设置数据的解释,也是很详细的,但是条理需要好好捋捋:

本地应用数据 (XAML)

0 0