在开发UWP(Universal Windows Platform)应用时,数据存储是一个常见的需求。本文将介绍如何在UWP应用中使用和封装存储功能。将探讨如何在C++/CX和C#中直接使用UWP存储API,以及如何通过封装简化代码。
在C++/CX中,可以直接使用UWP的存储API来存储和读取数据。以下是一个示例,展示了如何存储和读取一个整数类型的数据。
Windows::Storage::ApplicationDataContainer^ localSettings = Windows::Storage::ApplicationData::Current->LocalSettings;
localSettings->Values->Insert("RawKey", 123);
bool exists = localSettings->Values->HasKey("RawKey");
if (exists) {
Platform::Object^ obj = localSettings->Values->Lookup("RawKey");
int result = safe_cast(obj);
}
localSettings->Values->Clear();
在这个示例中,首先获取了应用的本地设置容器,然后插入了一个键值对,检查键是否存在,如果存在则读取其值,并最终清除所有值。
虽然C#的使用已经相对简单,但封装可以进一步简化代码。以下是一个使用封装的示例,它展示了如何存储和读取一个整数。
UWPStorage^ storage = ref new UWPStorage(StorageType::Local);
storage->SetInt32("WrapperKey", 456);
bool exists = false;
int result = storage->GetInt32("WrapperKey", &exists, 444);
storage->Clear();
在这个封装示例中,创建了一个UWPStorage对象,并使用它来存储和读取数据。封装后的代码更加简洁,减少了重复的代码量。
在C#中,同样可以直接使用UWP的存储API来存储和读取数据。以下是一个示例,展示了如何存储和读取一个整数类型的数据。
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["RawKey"] = 123;
int result = (int)(localSettings.Values["RawKey"]);
localSettings.Values.Clear();
在这个示例中,首先获取了应用的本地设置容器,然后插入了一个键值对,并读取其值,最后清除所有值。
在C#中,封装同样可以简化代码。以下是一个使用封装的示例,它展示了如何存储和读取一个整数。
UWPStorage storage = new UWPStorage(StorageType.Local);
storage.SetInt32("WrapperKey", 456);
bool exists = false;
int result = storage.GetInt32("WrapperKey", out exists, 444);
storage.Clear();
在这个封装示例中,创建了一个UWPStorage对象,并使用它来存储和读取数据。封装后的代码更加简洁,减少了重复的代码量。
除了存储基本数据类型,UWP还支持存储复合数据。以下是一个C++/CX的示例,展示了如何存储和读取包含整数和字符串的复合数据。
Windows::Storage::ApplicationDataContainer^ localSettings = Windows::Storage::ApplicationData::Current->LocalSettings;
// 创建复合设置
ApplicationDataCompositeValue^ composite = ref new ApplicationDataCompositeValue();
composite->Insert("intVal", dynamic_cast(PropertyValue::CreateInt32(1212)));
composite->Insert("strVal", dynamic_cast(PropertyValue::CreateString("string")));
auto values = localSettings->Values;
values->Insert("RawCompositeSetting", composite);
// 读取复合设置中的数据
ApplicationDataCompositeValue^ composite2 = safe_cast(localSettings->Values->Lookup("RawCompositeSetting"));
if (composite2) {
int one = safe_cast(composite2->Lookup("intVal"))->GetInt32();
String^ hello = safe_cast(composite2->Lookup("strVal"));
}
// 删除复合设置
values->Remove("RawCompositeSetting");
在这个示例中,首先创建了一个复合设置,然后插入了两个键值对,一个是整数,另一个是字符串。接着读取这些值,并最终删除复合设置。
以下是一个使用封装的C++/CX示例,它展示了如何存储和读取包含整数和字符串的复合数据。
UWPStorage^ storage = ref new UWPStorage(StorageType::Local);
// 创建复合设置
CompositeValue^ composite = ref new CompositeValue();
composite->SetInt32("intVal", 3434);
composite->SetString("strVal", "string");
storage->SetComposite("WrapperCompositeSetting", composite);
// 读取复合设置中的数据
bool exists = false;
CompositeValue^ composite2 = storage->GetComposite("WrapperCompositeSetting", &exists);
if (exists) {
int one = composite2->GetInt32("intVal", &exists, 4444);
String^ hello = composite2->GetString("strVal", &exists, "error");
}
// 删除复合设置
storage->Remove("WrapperCompositeSetting");
在这个封装示例中,创建了一个UWPStorage对象,并使用它来存储和读取复合数据。封装后的代码更加简洁,减少了重复的代码量。
通过封装,可以编写一个可移植的C++存储类,它不仅在UWP上工作,还可以在其他操作系统如Linux和MacOSX上工作,从而减少了将UWP应用移植到其他平台的工作量。