簡體   English   中英

使用全局類在Windows Phone應用程序中保存數據以用於Windows Phone中的用戶設置

[英]Saving data in Windows Phone application for user settings in Windows Phone using a global class

我是一名iOS開發人員,開始學習Windows Phone開發。 我有一個關於在Windows Phone應用程序中保存數據的問題, NSUserDefaultsiOS使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM