如何在我的 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 中的 EmguCV 实现

内存泄漏处理Xamarin.Forms

(Xamarin Forms)从“主页”导航到任何页面时如何显示工具栏?

如何在 Xamarin.Forms 中强制使用灯光模式?

单击按钮上的 Xamarin.Forms 动画(Flash 背景)

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色