全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Android中的SharedPreferences

 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小时内与您取得联系。