[英]Saving data in Windows Phone application for user settings in Windows Phone using a global class
我是一名iOS開發人員,開始學習Windows Phone開發。 我有一個關於在Windows Phone應用程序中保存數據的問題, NSUserDefaults
在iOS
使用NSUserDefaults
一樣。
我正在使用Windows Runtime API而不是 Silverlight API開發應用程序。 我已經看到Silverlight作為一種稱為“ Isolated Storage
和Windows運行時API的東西具有“ Application Data Storage
。
我的問題是,是否有在Windows Phone開發和C#
方面有更多經驗的人可以向我展示並指導我如何創建可用於在Windows Phone應用程序中存儲設置的全局類。
在iOS中,我有一個使用NSUserDefaults進行存儲和檢索的類,例如,如果用戶未登錄等。它看起來像這樣:
//
// RPStoreNSUserDefault.m
//
+ (RPStoreNSUserDefault *)sharedInstance
{
static RPStoreNSUserDefault *shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [[RPStoreNSUserDefault alloc] init];
});
return shared;
}
- (void)storeObject:(id)object forKey:(NSString*)key
{
NSData *serializer = [NSKeyedArchiver archivedDataWithRootObject:object];
@synchronized(self) {
[[NSUserDefaults standardUserDefaults] setObject:serializer forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
- (id)retrieveObjectForKey:(NSString*)key
{
NSData *serializer = [[NSUserDefaults standardUserDefaults] objectForKey:key];
return [NSKeyedUnarchiver unarchiveObjectWithData:serializer];
}
我如何利用Windows Phone和c#中的Application Data Storage
來做同樣的事情?
提前致謝。
這是我為在商店和電話上使用WinRT而創建的一項存儲服務。
它使用James Newtons Json.net將對象序列化和反序列化為json,然后再存儲它們,並充分利用泛型。
您可能還想研究StorageFile。 參見傑里·尼克松(Jerry Nixons)博客文章: http : //blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html
public class StorageService : IStorageService
{
#region Settings
public void SaveSetting(string key, string value)
{
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values[key] = value;
}
public void DeleteSetting(string key)
{
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values.Remove(key);
}
public string LoadSetting(string key)
{
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
var value = localSettings.Values[key];
if (value == null)
{
return null;
}
return value.ToString();
}
#endregion
#region Objects
public async Task<bool> PersistObjectAsync<T>(string key, T value)
{
if (string.IsNullOrEmpty(key) || value == null)
{
throw new ArgumentNullException();
}
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
string json = JsonConvert.SerializeObject(value, Formatting.Indented);
var file = await localFolder.CreateFileAsync(key, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, json);
return true;
}
public async Task<T> RetrieveObjectAsync<T>(string key)
{
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException();
}
var localFolder = ApplicationData.Current.LocalFolder;
try
{
var file = await localFolder.GetFileAsync(key);
string json = await FileIO.ReadTextAsync(file);
return JsonConvert.DeserializeObject<T>(json);
}
catch (Exception exp)
{
Debug.WriteLine(exp.Message);
return default(T);
}
}
public async Task<bool> DeleteObjectAsync(string key)
{
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException();
}
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
try
{
StorageFile file = await localFolder.GetFileAsync(key);
await file.DeleteAsync();
return true;
}
catch (Exception exp)
{
Debug.WriteLine(exp.Message);
return false;
}
}
#endregion
}
public interface IStorageService
{
void SaveSetting(string key, string value);
void DeleteSetting(string key);
string LoadSetting(string key);
Task<bool> PersistObjectAsync<T>(string key, T value);
Task<T> RetrieveObjectAsync<T>(string key);
Task<bool> DeleteObjectAsync(string key);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.