【问题标题】:Why is isolated storage not persisting in my WP7 application?为什么隔离存储没有保留在我的 WP7 应用程序中?
【发布时间】:2010-12-02 01:58:05
【问题描述】:

我正在为我的应用程序使用 IsolatedStorageSettings.ApplicationSettings。所有与独立存储相关的代码都出现在我的 Application_Launching、Application_Activated、Application_Closing 和 Application_Deactivated 方法中,如下所示:

public IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;


private void Application_Launching(object sender, LaunchingEventArgs e)
{
       if (settings.Contains("myObjList"))
       {
           App.ObjList = (ObservableCollection<myObj>)settings["myObjList"];
       }
       else
       {
            settings.Add("myObjList", App.ObjList);
       }
}

private void Application_Activated(object sender, ActivatedEventArgs e)
{
   if (settings.Contains("myObjList"))
   {
       App.ObjList = (ObservableCollection<myObj>)settings["myObjList"];
   }
   else
   {
       settings.Add("myObjList", App.ObjList);
   }
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{

    settings["myObjList"] = App.ObjList;
    settings.Save();
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
    settings["myObjList"] = App.ObjList;
    settings.Save();
}

所有这些都发生在每个新应用程序默认创建的 App.xaml.cs 文件中。

我尝试使用后退按钮和 Windows 按钮退出应用程序。让模拟器继续运行,我尝试使用后退按钮重新打开应用程序,然后导航到应用程序列表并打开。

我遇到的问题是,在加载或激活设置时。Contains["myObjList"] 返回 false 并继续将密钥重新添加到设置中。

有人知道为什么我的设置键(和值)没有保留吗?

【问题讨论】:

    标签: c# windows-phone-7 persistence isolatedstorage application-settings


    【解决方案1】:

    你的类 myObj 是可序列化的吗?根据经验,如果不是,则不会抛出任何错误,它只是没有添加到 IsolatedStorage。

    您可以使用类中的 DataContract 和 DataMember 属性来启用此功能,如下所示。

    [DataContract]
    public class myObj
    {
        [DataMember]
        public string Name { get; set; }
    
        [DataMember]
        public string Id { get; set; }
    
        [DataMember]
        public string Phone { get; set; }
    

    【讨论】:

    • 感谢您的帮助!这让我走得更远,我会做更多的实验,看看我想出了什么。
    【解决方案2】:

    我发现了一些问题:

    1. IsolatedStorageSettings doc 明确表示 调用 Save() 因为它不是线程安全的(向下滚动到 WP 的平台说明)并且可能引发异常(并导致您的设置不要被保存)。

    2. 这里似乎不是这样,但是到处使用字符串“myObjList”是非常危险的,因为它很容易拼错。我会把它放在一个常量中并排除任何输入错误

    3. In my experienceIsolatedStorageSettings 在当前的 WP7 版本上不是很健壮。您最好创建一个类并将其序列化为一个独立存储文件。无论如何,您的应用程序可能会保存更多内容,这样您的代码就会更简洁。

    【讨论】:

    • 感谢您的宝贵建议!我实际上并没有使用 myObjList 我只是把它作为我的例子。至于你的其他观点,我一定会考虑到的。
    • 您还介意将我链接到#3 的教程/示例吗?我不知道我应该使用 xml 序列化还是二进制...
    • 这将使您开始使用独立存储:jeffblankenburg.com/post/…,这是 DataContractSerializer 的一个很好的例子:onishimura.com/2010/07/25/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多