You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Application.Current.Properties缓存数据在Xamarin.Forms中报错

解决Xamarin.Forms本地数据存储(替代Android SharedPreference)的问题

作为有丰富Android开发经验的你,刚接触Xamarin.Forms想找类似SharedPreference的本地存储方案,却在使用Application.Current.Properties时遇到报错,这太正常了——我来帮你理清正确用法,还会给你更贴合SharedPreference使用习惯的替代方案!

先搞定Application.Current.Properties的正确打开方式

很多新手踩坑都是因为没注意它的核心细节:

1. 存储数据的正确步骤

Application.Current.Properties本质是内存中的字典,必须手动异步保存到本地,否则重启应用数据就会丢失,甚至可能触发报错:

// 1. 存入数据(支持string、int、bool等可序列化基本类型)
Application.Current.Properties["IsFirstLaunch"] = true;
Application.Current.Properties["UserAge"] = 28;
Application.Current.Properties["UserName"] = "Wai Yan Hein";

// 2. 关键!异步保存到本地,一定要加await
await Application.Current.SavePropertiesAsync();

2. 读取数据的安全姿势

直接读取不存在的Key会抛出KeyNotFoundException,一定要先判断Key是否存在:

// 方式1:用ContainsKey判断
if (Application.Current.Properties.ContainsKey("UserName"))
{
    string userName = Application.Current.Properties["UserName"] as string;
}

// 方式2:用TryGetValue更安全
if (Application.Current.Properties.TryGetValue("UserAge", out var ageObj))
{
    int userAge = (int)ageObj;
}

常见报错原因排查

  • 忘记调用SavePropertiesAsync():数据只在内存中,未持久化,重启后消失或保存逻辑报错
  • 读取未存在的Key:直接取值导致KeyNotFound异常
  • 存储不可序列化类型:比如自定义对象,需要先序列化为JSON字符串再存储

更贴合SharedPreference使用习惯的方案:Xamarin.Essentials Preferences

如果你觉得Application.Current.Properties的保存步骤太繁琐,推荐用Xamarin.Essentials的Preferences——它的设计几乎和Android的SharedPreference一致,无需手动保存,自动持久化,上手零成本:

基本用法

// 存储数据(支持string、int、bool、double等基本类型)
Preferences.Set("IsFirstLaunch", true);
Preferences.Set("UserName", "Wai Yan Hein");

// 读取数据,第二个参数是Key不存在时的默认值
bool isFirstLaunch = Preferences.Get("IsFirstLaunch", false);
string userName = Preferences.Get("UserName", "Guest");

// 移除单个Key
Preferences.Remove("UserAge");

// 清空所有存储的偏好设置
Preferences.Clear();

注意事项

  • Xamarin.Essentials需要确保在各平台的项目中已安装NuGet包(一般新建Xamarin.Forms项目会默认包含)
  • 存储的数据都是应用私有,和SharedPreference一样,其他应用无法访问

内容的提问来源于stack exchange,提问作者Wai Yan Hein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:12:37