【问题标题】:Xamarin.Forms application properties not saved between sessions with AndroidXamarin.Forms 应用程序属性未在与 Android 的会话之间保存
【发布时间】:2018-08-09 00:47:10
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: xamarin xamarin.android xamarin.forms


    【解决方案1】:

    我有一个类似的问题,只有调试版本保存了属性。我认为我们仍在等待错误修复,这是解决方法on Xamarin Forms bugzilla

    简而言之:转到.Droid project settings -> Android Options -> Linker
    并输入/添加"System.Runtime.Serialization" 以跳过链接程序集。

    【讨论】:

      【解决方案2】:

      哇!经过大量研究,我在我的同一个问题上得到了解决方案。问题是,当我在 Application.Current.Properties 中存储 List 或 DataTable 时,重新打开应用程序后所有属性都将被删除,但如果我将 List 或 DataTable 存储为序列化,它工作正常。

      【讨论】:

        【解决方案3】:

        在VS中你需要启用选项:

        在部署之间保留设备上的应用程序数据/缓存

        您可以在工具 > 选项 > Xamarin > Android 设置中找到它。

        【讨论】:

        • 感谢 - 只是为了确认 - 实际部署到 Android 设备(通过 Google Play 等)时会出现问题。该应用程序的行为与使用模拟器一样。数据在会话之间保留。我已经更新了我的问题以澄清这一点。
        • 如果你不能解决这个问题,看看Xamarin.Plugins.Settings
        • 该选项已启用,错误仍然存​​在:(
        【解决方案4】:

        我不知道这是否已在 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

        【讨论】:

          【解决方案5】:

          我不记得究竟是哪一部分解决了这个问题,但是当我按照说明从头到尾准备要发布的 Android 应用程序时,问题就消失了。在 Android 设备上使用调试版本时出现此问题。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-12
            • 1970-01-01
            • 1970-01-01
            • 2014-01-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多