如何在我的 Xamarin Forms 应用程序上本地保存一些用户数据?
How can I save some user data locally on my Xamarin Forms app?
我有一个简单的 Xamarin Forms 应用程序。我现在有一个简单的 POCO 对象(例如 User
实例或最新推文或订单或其他任何内容的列表)。
如何将此对象本地存储到设备?假设我将其序列化为 JSON.
此外,这些数据的安全性如何?它是钥匙串等的一部分吗?自动备份?
干杯!
你有几个选择。
- 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
- 本地存储。有一个很棒的 nuget 支持跨平台存储。有关详细信息,请参阅 PCLStorage
- 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;
我有一个简单的 Xamarin Forms 应用程序。我现在有一个简单的 POCO 对象(例如 User
实例或最新推文或订单或其他任何内容的列表)。
如何将此对象本地存储到设备?假设我将其序列化为 JSON.
此外,这些数据的安全性如何?它是钥匙串等的一部分吗?自动备份?
干杯!
你有几个选择。
- 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
- 本地存储。有一个很棒的 nuget 支持跨平台存储。有关详细信息,请参阅 PCLStorage
- 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;