【发布时间】: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。见stackoverflow.com/questions/54903226/…
标签: c# android xamarin.forms preferences xamarin.essentials