Xamarin Forms Sharedpreferences交叉
Xamarin Forms Sharedpreferences cross
我想知道以跨平台方式操作应用程序设置的最佳解决方案是什么。
在 iOS 中,我们可以在设置屏幕中更改应用程序外的设置,但在 windows phone 和 android 中没有。
所以,我的想法是在应用程序中创建一个正常的 page/screen,它显示我所有的应用程序设置,并具有一个接口,其中包含 Save() 和 Get() 方法,我可以使用 DependencyServices 为每个设备实现特定的方法.
这样做正确吗?
- Application subclass 有一个静态属性字典,可用于存储数据。可以使用 Application.Current.Properties.
从 Xamarin.Forms 代码中的任何位置访问它
Application.Current.Properties ["id"] = someClass.ID;
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
属性字典会自动保存到设备中。当应用程序 returns 从后台甚至重新启动后,添加到字典的数据将可用。 Xamarin.Forms 1.4 在 Application class - SavePropertiesAsync()
上引入了一个额外的方法 - 可以调用它来主动保留 Properties 字典。这是为了允许您在重要更新后保存属性,而不是冒着因崩溃或被 OS.
杀死而无法序列化的风险
https://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/app-lifecycle/
Xamarin.Forms 使用本机设置管理的插件。
- Android:共享首选项
- iOS:NSUserDefaults
- Windows Phone:隔离存储设置
- Windows存储/WindowsPhone转发:ApplicationDataContainer
https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Settings
我尝试使用 Application.Current.Properties 词典,但遇到了实施问题。
James Montemagno 的 Xam.Plugin.Settings NuGet 是一个不费吹灰之力的解决方案。 GitHub 安装 NuGet 会自动创建一个包含 Settings.cs 的 Helpers 文件夹。要创建持久设置,您可以执行以下操作:
private const string QuestionTableSizeKey = "QuestionTableSizeKey";
private static readonly long QuestionTableSizeDefault = 0;
和
public static long QuestionTableSize
{
get
{
return AppSettings.GetValueOrDefault<long>(QuestionTableSizeKey, QuestionTableSizeDefault);
}
set
{
AppSettings.AddOrUpdateValue<long>(QuestionTableSizeKey, value);
}
}
应用程序中的访问和设置如下所示:
namespace XXX
{
class XXX
{
public XXX()
{
long myLong = 495;
...
Helpers.Settings.QuestionTableSize = myLong;
...
long oldsz = Helpers.Settings.QuestionTableSize;
}
}
}
我想知道以跨平台方式操作应用程序设置的最佳解决方案是什么。
在 iOS 中,我们可以在设置屏幕中更改应用程序外的设置,但在 windows phone 和 android 中没有。
所以,我的想法是在应用程序中创建一个正常的 page/screen,它显示我所有的应用程序设置,并具有一个接口,其中包含 Save() 和 Get() 方法,我可以使用 DependencyServices 为每个设备实现特定的方法.
这样做正确吗?
- Application subclass 有一个静态属性字典,可用于存储数据。可以使用 Application.Current.Properties. 从 Xamarin.Forms 代码中的任何位置访问它
Application.Current.Properties ["id"] = someClass.ID;
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
属性字典会自动保存到设备中。当应用程序 returns 从后台甚至重新启动后,添加到字典的数据将可用。 Xamarin.Forms 1.4 在 Application class - SavePropertiesAsync()
上引入了一个额外的方法 - 可以调用它来主动保留 Properties 字典。这是为了允许您在重要更新后保存属性,而不是冒着因崩溃或被 OS.
https://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/app-lifecycle/
Xamarin.Forms 使用本机设置管理的插件。
- Android:共享首选项
- iOS:NSUserDefaults
- Windows Phone:隔离存储设置
- Windows存储/WindowsPhone转发:ApplicationDataContainer
https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Settings
我尝试使用 Application.Current.Properties 词典,但遇到了实施问题。
James Montemagno 的 Xam.Plugin.Settings NuGet 是一个不费吹灰之力的解决方案。 GitHub 安装 NuGet 会自动创建一个包含 Settings.cs 的 Helpers 文件夹。要创建持久设置,您可以执行以下操作:
private const string QuestionTableSizeKey = "QuestionTableSizeKey";
private static readonly long QuestionTableSizeDefault = 0;
和
public static long QuestionTableSize
{
get
{
return AppSettings.GetValueOrDefault<long>(QuestionTableSizeKey, QuestionTableSizeDefault);
}
set
{
AppSettings.AddOrUpdateValue<long>(QuestionTableSizeKey, value);
}
}
应用程序中的访问和设置如下所示:
namespace XXX
{
class XXX
{
public XXX()
{
long myLong = 495;
...
Helpers.Settings.QuestionTableSize = myLong;
...
long oldsz = Helpers.Settings.QuestionTableSize;
}
}
}