在我的跨平台应用程序中,我以下列方式保存应用程序属性:
Application.Current.Properties["myValue"] = "Test";
await Application.Current.SavePropertiesAsync();
然后我会像这样检索它们:
string myVal = Application.Current.Properties["myValue"];
使用Android模拟器时,这非常有效。我可以关闭模拟器,当我再次重新启动它时,我的应用程序数据将被保留。
但是,当我将此应用程序部署到物理Android设备时,数据保存按预期工作,直到我关闭应用程序并再次打开它。此时我检索一个空值。就好像数据只保存到内存中(而不是保存到文件中)。
此外,完全相同的应用程序的iOS版本可以完美无缺地运行。当我打开应用程序时,所有以前的值都已保存,我可以检索它们。
我在Android版本上做错了什么?我是否需要启用Android设置,权限或选项,以便在实际部署到手机时在应用会话之间保存值?
答案 0 :(得分:3)
我遇到了类似的问题,只有调试版本保存了属性。我认为我们仍在等待修复错误,这就是解决方法on Xamarin Forms bugzilla。
简而言之:转到.Droid project settings -> Android Options -> Linker
并输入/添加"System.Runtime.Serialization"
以跳过链接程序集。
答案 1 :(得分:1)
哇!经过大量研究,我在我的同一个问题上得到了解决方案。问题是,当我将List或DataTable存储在Application.Current.Properties中时,重新打开应用程序后,所有属性都将被删除,但是如果我将List或DataTable存储为序列化文件,则可以正常工作。
答案 2 :(得分:0)
在VS中,您需要启用选项:
在部署之间保留设备上的应用程序数据/缓存
你可以在工具>找到这个。选项> Xamarin> Android设置。
答案 3 :(得分:0)
我不知道这是否已在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
答案 4 :(得分:0)
我不记得究竟是哪一部分解决了这个问题,但是当我按照说明准备Android应用程序从头到尾发布时,问题就消失了。在Android设备上使用调试版本时出现问题。
该链接详细说明了在发布到设备时Android项目的建议设置。遵循这些说明应解决问题。