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

时间:2015-07-27 14:05:58

标签: xamarin storage xamarin.forms

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

如何将此对象本地存储到设备中?让我们想象一下我将它序列化为JSON。

此外,这些数据有多安全?它是Keychains等的一部分吗?自动备份?

喝彩!

5 个答案:

答案 0 :(得分:69)

你有两个选择。

  1. SQLite的。此选项是跨平台的,如果您有大量数据,则可以正常运行。您还获得了事务支持和异步支持的额外奖励。 编辑:过去我建议使用SQLite.Net-PCL。由于issues涉及Android 7.0支持(以及明显的支持日落),我现在建议使用最初分叉的项目:sqlite-net
  2. 本地存储空间。有一个很棒的nuget支持跨平台存储。有关详细信息,请参阅PCLStorage
  3. Xamarin.Forms中还实现了Application.Current.Properties,允许简单的键值对数据。
  4. 我认为您必须调查并找出最符合您需求的路线。

    就安全性而言,这取决于您将数据放在每台设备上的位置。 Android默认情况下将应用数据存储在安全的应用程序文件夹中(如果您已植根,则不安全)。 iOS有几个不同的文件夹,可根据不同需求进行数据存储。在此处阅读更多内容:iOS Data Storage

答案 1 :(得分:18)

另一个选项是xamarin表单设置插件https://github.com/jamesmontemagno/SettingsPlugin。如果您需要存储,例如用户实例,在读取时将其序列化为json,并在读取时反序列化。

使用原生设置管理

  • Android:SharedPreferences
  • iOS:NSUserDefaults
  • Windows Phone:IsolatedStorageSettings
  • 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));
         }
      }
    

答案 2 :(得分:5)

请使用Xamarin.Essentials

Preferences类有助于将应用程序首选项存储在键/值存储中。

要保存值:

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

要获取值:

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

答案 3 :(得分:0)

如果它是键值(一个值)数据存储,请遵循以下代码

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

await Application.Current.SavePropertiesAsync();

获得相同的值

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

答案 4 :(得分:0)

如果要存储简单值(例如字符串),请遵循此示例代码。

将“ totalSeats.Text”的值设置为“ SeatNumbers”键从第1页

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

然后,您只需从任何其他页面( page2

中获取值即可。
var value = Application.Current.Properties["SeatNumbers"].ToString();

此外,您可以将该值设置为另一个Label或Entry等。

SeatNumbersEntry.Text = value;