有没有办法通过 shareName 获取 Xamarin.Essentials.Preferences
Posted
技术标签:
【中文标题】有没有办法通过 shareName 获取 Xamarin.Essentials.Preferences【英文标题】:Is there a way to get Xamarin.Essentials.Preferences by shareName 【发布时间】:2021-12-10 04:34:36 【问题描述】:我正在使用 Xamarin.Essentials 来存储我的应用程序的用户首选项。我有一个场景,我想存储多个使用“sharedName”的首选项(参见下面的代码)。
const string bShare = "BreakfastPrefs";
private bool _eggs;
private bool _bacon;
public bool Eggs
get
//load from prefs
return _eggs= Preferences.Get("EggSwitch", false, bShare );
set
//save to prefs
_eggs= value;
Preferences.Set("Eggswitch", value, bShare );
public bool Bacon
get
//load from prefs
return _bacon= Preferences.Get("BaconSwitch", false, bShare );
set
//save to prefs
_bacon= value;
Preferences.Set("BaconSwitch", value, bShare );
我希望稍后我可以执行类似 'Preferences.GetByShareName("bShare") 的操作来检索该共享中的所有首选项。但似乎我只是从偏好中一一取回每个对象。如果我不能这样做,我不确定 Preferences 的 shareName 属性的用途。
这是 Xamarin.Essentials.Preferences 中的 Get 方法之一的示例。
public static string Get(string key, string defaultValue, string sharedName);
任何帮助将不胜感激,我能想到的唯一另一件事是将我的鸡蛋和培根作为分隔列表存储在一个“首选项”中,然后当我想检索它时将其拆分为一个集合.. ..但这感觉有点讨厌。
感谢任何输入。谢谢!
【问题讨论】:
如果有的话,您希望Preferences.GetByShareName("bShare")
准确返回什么?
一个包含一个项目的集合,通过使用“GetShareByName”我认为无论计数如何,Preferences 都返回一个集合是公平的
我还是不明白你的期望。例如,如果Eggs
和Bacon
属性都设置为true,那么您期望该方法的结果是什么?包含“EggSwitch”和“BaconSwitch”的列表?
您可以手动序列化您的设置并使用“sharedName”作为密钥存储它们。您可以修改现有首选项(Essentials 是开源的)以满足您的需求。或者您可以推出自己的自定义实现 - Preferences 是一个相当简单的 KeyValue 存储。
不幸的是,我的回答可能是将对象存储为 JSON。见***.com/questions/54903226/…
【参考方案1】:
sharedName
参数不应用作对您的内部偏好进行分类的方式。其目的是在整个操作系统范围内启用首选项共享,以便应用程序可以使用另一个应用程序设置的首选项。
至于对您的偏好进行分类,如果您的要求很简单,您可以序列化您的值以存储一个以您的bShare
作为键的字符串,而无需指定sharedName
。否则,我建议改用实际的本地数据库。
【讨论】:
【参考方案2】:对于任何感兴趣的人,我通过序列化我自己的 Dictionary 对象来解决这个问题,该对象将键和值存储为 JSON。然后将其存储在 Xamarin.Essentials.Preferences 对象中。然后我根据需要反序列化。
感谢您的意见。
【讨论】:
以上是关于有没有办法通过 shareName 获取 Xamarin.Essentials.Preferences的主要内容,如果未能解决你的问题,请参考以下文章