使用Application.Current.Properties的持久存储无法正常工作

时间:2016-09-13 12:30:27

标签: xamarin xamarin.forms

尝试在Xamarin Forms中实现持久存储。在研究了xamarin后,我决定使用Application.Current.Properties。

看起来它只是在应用程序仍然存活时才起作用。如果我关闭de app并再次启动它,Application.Current.Properties看起来是空的。

有人知道我做错了什么吗?我可以通过其他方式实现此功能吗?

像往常一样,谢谢你们。

4 个答案:

答案 0 :(得分:7)

我在Android上遇到了Application.Current.Properties的大量问题。我强烈建议使用Xamarin Settings插件,而我从未遇到任何问题。即使应用程序关闭,它仍然是持久的。

即使您关闭应用程序,也应该可以使用Application.Current.Properties。不知道为什么它不会,但它也不会让我感到惊讶。

*编辑:要在安装后使用,基本上CrossSettings.Current是将完成工作的插件类,但该示例只是创建一个单独的属性来访问它。因此,创建一个新文件,我们称之为 SettingsImplementation

public static class SettingsImplementation {

    #region Instance

    private static Lazy<ISettings> _appSettings;

    public static ISettings AppSettings {
        get {
            if(_appSettings == null) {
                _appSettings = new Lazy<ISettings>(() => CrossSettings.Current, LazyThreadSafetyMode.PublicationOnly);
            }

            return _appSettings.Value;
        }
        set {
            _appSettings = new Lazy<ISettings>(() => value, LazyThreadSafetyMode.PublicationOnly);
        }
    }

    #endregion

    private const string UserNameKey = "username_key"; //Key used to get your property
    private static readonly string UserNameDefault = string.Empty; //Default value for your property if the key-value pair has not been created yet

    public static string UserName {
        get { return AppSettings.GetValueOrDefault<string>(UserNameKey, UserNameDefault); }
        set { AppSettings.AddOrUpdateValue<string>(UserNameKey, value); }
    }
}

然后使用它你可以在你的应用程序的任何地方执行此操作:

SettingsImplementation.UserName = "something";

OR

string username = SettingsImplementation.UserName;

答案 1 :(得分:0)

我遇到了同样的问题。

问题:

我试图将复杂的对象放入“应用程序属性”中。

事实证明,属性只能采用原始数据类型。

此博客非常有帮助。

https://codemilltech.com/persist-whatever-you-want-with-xamarin-forms/

答案 2 :(得分:0)

关于此问题的我自己的问题是由于我没有使用以下代码行显式保存属性:

Application.Current.SavePropertiesAsync();

答案 3 :(得分:0)

您可以改用 Xamarin 基本要素“首选项”:

Preferences.Set("Key", "Value");
Preferences.Get("Key", "Default");