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