SharedPreferences作为Android存储数据方式之一,主要特点是:

1. 只支持Java基本数据类型,不支持自定义数据类型;
2. 应用内数据共享;
3. 使用简单.
使用方法
1、存数据
SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
sp.edit().putString("name", "小张").putInt("age", 11).commit();
或者下面的写法也可以
SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("name", "小张");
editor.putInt("age", 11);
editor.commit();
切记不要写成下面的形式,会导致数据无法存储
SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
sp.edit().putString("name", "小张");
sp.edit().putInt("age", 11);
sp.edit().commit();
为什么这种方式无法存储,因为sp.edit()每次都会返回一个新的Editor对象,Editor的实现类EditorImpl里面会有一个缓存的Map,最后commit的时候先将缓存里面的Map写入内存中的Map,然后将内存中的Map写进XML文件中。使用上面的方式commit,由于sp.edit()又重新返回了一个新的Editor对象,缓存中的Map是空的,所以导致数据无法被存储。
2、取数据
SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
String name = sp.getString("name", null);
int age = sp.getInt("age", 0);
getSharedPreferences的具体实现是在frameworks/base/core/java/android/app/ContextImpl.java,代码如下:
[html] view plain copy
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
SharedPreferencesImpl sp;
synchronized (ContextImpl.class) {
......
final String packageName = getPackageName();
ArrayMap<String, SharedPreferencesImpl> packagePrefs = sSharedPrefs.get(packageName);
if (packagePrefs == null) {
packagePrefs = new ArrayMap<String, SharedPreferencesImpl>();
sSharedPrefs.put(packageName, packagePrefs);
}
......
sp = packagePrefs.get(name);
if (sp == null) {
File prefsFile = getSharedPrefsFile(name);
sp = new SharedPreferencesImpl(prefsFile, mode);
packagePrefs.put(name, sp);
return sp;
}
}
......
return sp;
}
SharedPreferencesImpl是SharedPreferences接口的具体实现类,一个name对应一个SharedPreferencesImpl,一个应用程序中根据name的不同会有多个SharedPreferencesImpl。
SharedPreferencesImpl的具体实现是在frameworks/base/core/java/android/app/SharedPreferencesImpl.java,我们可以通过getSharedPreferences获得SharedPreferences的实例,当我们调用sp.getString等get方法取数据时,实际上是直接从内存中的Map里面去取,get方法传入的第一个参数正好是Map的key,第二个参数是当Map中没有这个key对应值的时候,返回的默认值。
以上所述是小编给大家介绍的Android中的SharedPreferences,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# sharedpreferences
# Android 使用 SharedPreferences 保存少量数据的实现代码
# Android数据共享 sharedPreferences 的使用方法
# Android中SharedPreferences简单使用实例
# Android SharedPreferences存储的正确写法
# Android本地存储SharedPreferences详解
# Android 文件存储与SharedPreferences存储方式详解用法
# 是在
# 会有
# 小张
# 小编
# 第一个
# 多个
# 在此
# 我们可以
# 第二个
# 给大家
# 自定义
# 不支持
# 当我们
# 先将
# 所述
# 给我留言
# 感谢大家
# 应用程序
# 默认值
# 写进
相关文章:
如何配置FTP站点权限与安全设置?
b2c电商网站制作流程,b2c水平综合的电商平台?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
制作网站的公司有哪些,做一个公司网站要多少钱?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
济南专业网站制作公司,济南信息工程学校怎么样?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
建站主机选购指南:核心配置优化与品牌推荐方案
如何挑选优质建站一级代理提升网站排名?
Java解压缩zip - 解压缩多个文件或文件夹实例
外贸公司网站制作,外贸网站建设一般有哪些步骤?
高端云建站费用究竟需要多少预算?
建站之星价格显示格式升级,你的预算足够吗?
如何快速搭建高效WAP手机网站吸引移动用户?
三星网站视频制作教程下载,三星w23网页如何全屏?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何通过PHP快速构建高效问答网站功能?
临沂网站制作企业,临沂第三中学官方网站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
建站之星免费版是否永久可用?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何在腾讯云服务器快速搭建个人网站?
如何通过cPanel快速搭建网站?
如何选择服务器才能高效搭建专属网站?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
c# 在ASP.NET Core中管理和取消后台任务
高防服务器:AI智能防御DDoS攻击与数据安全保障
网站设计制作公司地址,网站建设比较好的公司都有哪些?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站之星客服服务时间及联系方式如何?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
模具网站制作流程,如何找模具客户?
如何在阿里云香港服务器快速搭建网站?
建站之星2.7模板:企业网站建设与h5定制设计专题
北京企业网站设计制作公司,北京铁路集团官方网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何在西部数码注册域名并快速搭建网站?
建站168自助建站系统:快速模板定制与SEO优化指南
西安大型网站制作公司,西安招聘网站最好的是哪个?
,怎么在广州志愿者网站注册?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
建站之星如何修改网站生成路径?
如何获取上海专业网站定制建站电话?
*请认真填写需求信息,我们会在24小时内与您取得联系。