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 packagePrefs = sSharedPrefs.get(packageName);     if (packagePrefs == null) {       packagePrefs = new ArrayMap();       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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. mybatisplus的坑 insert标签insert into select无参数问题的解决
  3. python起点网月票榜字体反爬案例
  4. python list.sort()根据多个关键字排序的方法实现
  5. android EditText设置不可写
  6. Android(安卓)拨号器的简单实现
  7. 《Android开发从零开始》——25.数据存储(4)
  8. android实现字体闪烁动画的方法
  9. Android系统配置数据库注释(settings.db)

随机推荐

  1. 移动端判断当前环境是否是微信、IOS、安
  2. 如何在Ubuntu12.1下安装Android(安卓)NDK
  3. Android(安卓)API 中文 (53) —— BaseAdap
  4. android 8.0后打开wifi热点以及更改热点
  5. TextView设置中文粗体
  6. Android(安卓)webview 使用自定义字体
  7. Android(安卓)简单2D绘图
  8. android 动态修改菜单menu
  9. Android(安卓)Frame动画
  10. Linux下的Android(安卓)+ Eclipse环境搭