如何在我的 Xamarin Forms 应用程序上本地保存一些用户数据?

How can I save some user data locally on my Xamarin Forms app?

我有一个简单的 Xamarin Forms 应用程序。我现在有一个简单的 POCO 对象(例如 User 实例或最新推文或订单或其他任何内容的列表)。

如何将此对象本地存储到设备?假设我将其序列化为 JSON.

此外,这些数据的安全性如何?它是钥匙串等的一部分吗?自动备份?

干杯!

你有几个选择。

  1. SQLite。此选项是跨平台的,如果您有大量数据,则效果很好。您还可以获得事务支持和异步支持的额外好处。 编辑:过去我建议使用SQLite.Net-PCL. Due to issues involving Android 7.0 support (and an apparent sunsetting of support) I now recommend making use of the project that was originally forked from: sqlite-net
  2. 本地存储。有一个很棒的 nuget 支持跨平台存储。有关详细信息,请参阅 PCLStorage
  3. Xamarin.Forms 中还实现了 Application.Current.Properties,允许简单的键值对数据。

我认为您必须调查并找出最能满足您需求的路线。

就安全性而言,这取决于您将数据放置在每台设备上的位置。 Android 默认情况下将应用程序数据存储在一个安全的应用程序文件夹中(如果您已获得 root 权限,则不是那么安全)。 iOS 根据不同的需要,有几个不同的文件夹用于数据存储。在这里阅读更多:iOS Data Storage

另一种选择是Xamarin Forms settings plugin

例如如果需要存储用户实例,存储时序列化为json,读取时反序列化

即可

使用本机设置管理

  • Android:共享首选项
  • iOS:NSUserDefaults
  • Windows Phone:隔离存储设置
  • Windows RT/UWP:ApplicationDataContainer

      public User CurrentUser
      {
         get
         {
            User user = null;
            var serializedUser = CrossSettings.Current.GetValueOrDefault<string>(UserKey);
            if (serializedUser != null)
            {
               user = JsonConvert.DeserializeObject<User>(serializedUser);
            }
    
            return user;
         }
         set
         {
            CrossSettings.Current.AddOrUpdateValue(UserKey, JsonConvert.SerializeObject(value));
         }
      }
    

编辑: 有一个新的解决方案。只需使用 Xamarin.Essentials.

Preferences.Set(UserKey, JsonConvert.SerializeObject(value));
var user= JsonConvert.DeserializeObject<User>(Preferences.Get(UserKey, "default_value");

请使用Xamarin.Essentials

首选项 class 有助于将应用程序首选项存储在 key/value 存储中。

要保存一个值:

Preferences.Set("my_key", "my_value");

获取值:

var myValue = Preferences.Get("my_key", "default_value");

如果是Key-value(一个值)数据存储,按照下面的代码

Application.Current.Properties["AppNumber"] = "123"

await Application.Current.SavePropertiesAsync();

获取相同的值

var value = Application.Current.Properties["AppNumber"];

如果您想存储一个简单的值,例如字符串,请遵循此示例代码。

将 "totalSeats.Text" 的值设置为第 1 页的 "SeatNumbers" 键

Application.Current.Properties["SeatNumbers"] = totalSeats.Text;
await Application.Current.SavePropertiesAsync();

然后,您可以简单地从任何其他页面获取值 (page2)

var value = Application.Current.Properties["SeatNumbers"].ToString();

此外,您可以将该值设置为另一个标签或条目等。

SeatNumbersEntry.Text = value;