如何在我的 Xamarin Forms 应用程序上本地保存一些用户数据?
Posted
技术标签:
【中文标题】如何在我的 Xamarin Forms 应用程序上本地保存一些用户数据?【英文标题】:How can I save some user data locally on my Xamarin Forms app? 【发布时间】:2015-10-17 18:29:36 【问题描述】:我有一个简单的 Xamarin Forms 应用程序。我现在有一个简单的 POCO 对象(例如 User
实例或最近的推文或订单列表或其他)。
如何将此对象本地存储到设备中?假设我将它序列化为 JSON。
此外,这些数据的安全性如何?它是钥匙串等的一部分吗?自动备份?
干杯!
【问题讨论】:
【参考方案1】:你有几个选择。
-
SQLite。此选项是跨平台的,如果您有大量数据,则效果很好。您还可以获得事务支持和异步支持的额外好处。 编辑:过去我建议使用SQLite.Net-PCL。由于 issues 涉及 android 7.0 支持(以及明显的支持终止),我现在建议使用最初派生自的项目:sqlite-net
本地存储。有一个很棒的 nuget 支持跨平台存储。欲了解更多信息,请参阅PCLStorage
在 Xamarin.Forms 中还实现了 Application.Current.Properties,它允许简单的键值对数据。
我认为您必须进行调查并找出最适合您需求的路线。
就安全性而言,这取决于您在每台设备上放置数据的位置。默认情况下,Android 将应用程序数据存储在安全的应用程序文件夹中(如果您是 root 用户,则不是那么安全)。 ios根据不同的需要有几个不同的文件夹用于数据存储。在这里阅读更多:iOS Data Storage
【讨论】:
对于非常简单的数据,我也推荐Application.Current.Properties。但请记住,您调用 Application.Current.SavePropertiesAsync();设置属性后。否则,您无法知道它们是否会在应用程序重新启动后继续存在。 另外请记住,Application.Current.Properties 适用于暂停-恢复场景。当应用程序重新启动时,该值通常不会保留。【参考方案2】:另一个选项是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");
【讨论】:
【参考方案3】:请使用Xamarin.Essentials
Preferences 类有助于将应用程序首选项存储在键/值存储中。
保存一个值:
Preferences.Set("my_key", "my_value");
获取值:
var myValue = Preferences.Get("my_key", "default_value");
【讨论】:
你能保存一个项目列表吗? @Pxaml,可以看到***.com/questions/54903226/…,第二个答案【参考方案4】:如果是Key value(one value)数据存储,请按照以下代码进行
Application.Current.Properties["AppNumber"] = "123"
await Application.Current.SavePropertiesAsync();
获取相同的值
var value = Application.Current.Properties["AppNumber"];
【讨论】:
【参考方案5】:如果要存储简单的值,例如字符串,请按照此示例代码进行操作。
将“totalSeats.Text”的值设置为“SeatNumbers”键从 page1
Application.Current.Properties["SeatNumbers"] = totalSeats.Text;
await Application.Current.SavePropertiesAsync();
然后,您可以简单地从任何其他页面(page2)获取值
var value = Application.Current.Properties["SeatNumbers"].ToString();
此外,您可以将该值设置为另一个标签或条目等。
SeatNumbersEntry.Text = value;
【讨论】:
以上是关于如何在我的 Xamarin Forms 应用程序上本地保存一些用户数据?的主要内容,如果未能解决你的问题,请参考以下文章
(Xamarin Forms)从“主页”导航到任何页面时如何显示工具栏?
单击按钮上的 Xamarin.Forms 动画(Flash 背景)
如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色