Xamarin.Forms 应用程序属性未在 Android 的会话之间保存
Xamarin.Forms application properties not saved between sessions with Android
在我的跨平台应用程序中,我按以下方式保存应用程序属性:
Application.Current.Properties["myValue"] = "Test";
await Application.Current.SavePropertiesAsync();
我稍后会像这样检索它们:
string myVal = Application.Current.Properties["myValue"];
这在使用 Android 模拟器时效果很好。我可以关闭模拟器,当我再次重启时,我的应用程序数据会被保留。
但是,当我将此应用程序部署到物理 Android 设备时,数据保存会按预期工作,直到我关闭该应用程序并再次打开它。此时我检索到一个空值。好像数据只保存到内存(而不是文件)。
此外,完全相同的应用程序的 iOS 版本可以完美运行。当我打开应用程序时,所有以前的值都已保存,我可以检索它们。
我在 Android 版本上做错了什么?当实际部署到 phone 时,是否需要启用 Android 设置、权限或选项,以便在应用程序会话之间保存值?
在 VS 中您需要启用选项:
Preserve application data/cache on device between deploys
您可以在“工具”>“选项”>“Xamarin”>“Android 设置”中找到它。
我不知道这是否已在 Xamarin Forms 的最新更新中停止,数据可用直到应用程序 运行 类似于会话但持久存储不起作用。
我认为最好的 api Akavache https://github.com/akavache/Akavache。
您可以阅读此博客 https://codemilltech.com/akavache-is-aka-awesome/。
更新
在 bugzilla 中提交了一个错误:
https://bugzilla.xamarin.com/show_bug.cgi?id=26444
我有一个类似的问题,只有调试版本保存了属性。我认为我们仍在等待错误修复,这是解决方法 on Xamarin Forms bugzilla。
简而言之:转到.Droid project settings -> Android Options -> Linker
和 enter/add "System.Runtime.Serialization"
跳过链接程序集。
我不记得到底是哪一部分解决了问题,但是当我按照说明从头到尾准备 Android 申请发布时,问题就消失了。在 Android 设备上使用调试版本时出现问题。
link 详细介绍了 Android 项目发布到设备时的建议设置。按照这些说明应该可以解决问题。
哇!经过大量研究,我得到了针对我的相同问题的解决方案。问题是,当我将 List 或 DataTable 存储在 Application.Current.Properties 中时,所有属性在重新打开应用程序后都会被删除,但如果我将 List 或 DataTable 存储为序列化,它工作正常。
在我的跨平台应用程序中,我按以下方式保存应用程序属性:
Application.Current.Properties["myValue"] = "Test";
await Application.Current.SavePropertiesAsync();
我稍后会像这样检索它们:
string myVal = Application.Current.Properties["myValue"];
这在使用 Android 模拟器时效果很好。我可以关闭模拟器,当我再次重启时,我的应用程序数据会被保留。
但是,当我将此应用程序部署到物理 Android 设备时,数据保存会按预期工作,直到我关闭该应用程序并再次打开它。此时我检索到一个空值。好像数据只保存到内存(而不是文件)。
此外,完全相同的应用程序的 iOS 版本可以完美运行。当我打开应用程序时,所有以前的值都已保存,我可以检索它们。
我在 Android 版本上做错了什么?当实际部署到 phone 时,是否需要启用 Android 设置、权限或选项,以便在应用程序会话之间保存值?
在 VS 中您需要启用选项:
Preserve application data/cache on device between deploys
您可以在“工具”>“选项”>“Xamarin”>“Android 设置”中找到它。
我不知道这是否已在 Xamarin Forms 的最新更新中停止,数据可用直到应用程序 运行 类似于会话但持久存储不起作用。
我认为最好的 api Akavache https://github.com/akavache/Akavache。
您可以阅读此博客 https://codemilltech.com/akavache-is-aka-awesome/。
更新 在 bugzilla 中提交了一个错误: https://bugzilla.xamarin.com/show_bug.cgi?id=26444
我有一个类似的问题,只有调试版本保存了属性。我认为我们仍在等待错误修复,这是解决方法 on Xamarin Forms bugzilla。
简而言之:转到.Droid project settings -> Android Options -> Linker
和 enter/add "System.Runtime.Serialization"
跳过链接程序集。
我不记得到底是哪一部分解决了问题,但是当我按照说明从头到尾准备 Android 申请发布时,问题就消失了。在 Android 设备上使用调试版本时出现问题。
link 详细介绍了 Android 项目发布到设备时的建议设置。按照这些说明应该可以解决问题。
哇!经过大量研究,我得到了针对我的相同问题的解决方案。问题是,当我将 List 或 DataTable 存储在 Application.Current.Properties 中时,所有属性在重新打开应用程序后都会被删除,但如果我将 List 或 DataTable 存储为序列化,它工作正常。