当前位置: 移动技术网 > 移动技术>移动开发>Android > 详解Android中的SharedPreferences

详解Android中的SharedPreferences

2019年07月24日  | 移动技术网移动技术  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网