Xamarin.Forms应用程序属性未在Android

时间:2016-05-06 09:18:54

标签: xamarin xamarin.android xamarin.forms

在我的跨平台应用程序中,我以下列方式保存应用程序属性:

Application.Current.Properties["myValue"] = "Test";
await Application.Current.SavePropertiesAsync();

然后我会像这样检索它们:

string myVal = Application.Current.Properties["myValue"];

使用Android模拟器时,这非常有效。我可以关闭模​​拟器,当我再次重新启动它时,我的应用程序数据将被保留。

但是,当我将此应用程序部署到物理Android设备时,数据保存按预期工作,直到我关闭应用程序并再次打开它。此时我检索一个空值。就好像数据只保存到内存中(而不是保存到文件中)。

此外,完全相同的应用程序的iOS版本可以完美无缺地运行。当我打开应用程序时,所有以前的值都已保存,我可以检索它们。

我在Android版本上做错了什么?我是否需要启用Android设置,权限或选项,以便在实际部署到手机时在应用会话之间保存值?

5 个答案:

答案 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设备上使用调试版本时出现问题。

https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/

该链接详细说明了在发布到设备时Android项目的建议设置。遵循这些说明应解决问题。