欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解Android中的SharedPreferences

程序员文章站 2023-12-04 10:25:10
 sharedpreferences作为android存储数据方式之一,主要特点是:  1. 只支持java基本数据类型,不支持自定义数据类型;...

 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,希望对大家有所帮助