SharedPreferences是Android的一个轻量级存储工具,它采用的存储结构是Key-Value的键值对方式,类似于Java的Properties,二者都是把Key-Value的键值对保存在配置文件中。不同的是,Properties的文件内容形如Key=Value,而SharedPreferences的存储介质是XML文件,且以XML标记保存键值对。保存共享参数键值对信息的文件路径为:/data/data/应用包名/shared_prefs/文件名.xml。下面是一个共享参数的XML文件例子:
share.png
基于XML格式的特点,共享参数主要用于如下场合:
(1)简单且孤立的数据。若是复杂且相互关联的数据,则要保存于关系数据库。
(2)文本形式的数据。若是二进制数据,则要保存至文件。
(3)需要持久化存储的数据。App退出后再次启动时,之前保存的数据仍然有效。
实际开发中,共享参数经常存储的数据包括:App的个性化配置信息、用户使用App的行为信息、临时需要保存的片段信息等。
共享参数对数据的存储和读取操作类似于Map,也有存储数据的put方法,以及读取数据的get方法。调用getSharedPreferences方法可以获得共享参数实例,获取代码示例如下:
111.png
由以上代码可知,getSharedPreferences方法的第一个参数是文件名,填share表示共享参数的文件名是share.xml;第二个参数是操作模式,填MODE_PRIVATE表示私有模式。
往共享参数存储数据要借助于Editor类,保存数据的代码示例如下:
222.png
从共享参数读取数据相对简单,直接调用共享参数实例的get * * 方法即可读取键值,注意get**方法的第二个参数表示默认值,读取数据的代码示例如下:
SharedPreferences常用的属性和方法:
方法名称 | 描述 |
---|---|
public abstract boolean contains (String key) | 判断SharedPreferences是否包含特定key的数据 |
public abstract SharedPreferences.Editor edit () | 返回一个Edit对象用于操作SharedPreferences |
public abstract Map getAll () | 获取SharedPreferences数据里全部的key-value对 |
getXXX(String key,XXX defvlaue) | 获取SharedPreferences数据指定key所对应的value,如果该key不存在,返回默认值defValue。其中XXX可以是boolean、float、int、long、String等基本类型的值 |
由于SharedPreference是一个接口,而且在这个接口里并没有提供写入数据和读取数据的能力。但是在其内部有一个Editor内部的接口,Edit这个接口有一系列的方法用于操作SharedPreference。
Editor接口的常用方法:
方法名称 | 描述 |
---|---|
public abstract SharedPreferences.Editor clear () | 清空SharedPreferences里所有的数据 |
public abstract boolean commit () | 当Editor编辑完成后,调用该方法可以提交修改,而且必须要调用这个数据才修改 |
public abstract SharedPreferences.Editor putXXX (String key, boolean XXX) | 向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值 |
public abstract SharedPreferences.Editor remove (String key) | 删除SharedPreferences里指定key对应的数据项 |
SharedPreferences是一个接口,程序是无法创建SharedPreferences实例的,可以通过Context.getSharedPreferences(String name,int mode)来得到一个SharedPreferences实例;
name:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上。一般这个文件存储在/data/data//shared_prefs下(这个面试常问到)
mode:是指定读写方式,其值有三种,分别为:
Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读和写;
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读操作,但不能进行写操作;
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。
网友评论