SharedPreferences是一种轻量级的数据存储方式。它可以用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中。
SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下常用方法来访问SharedPreferences的key_value键值对。
一般用在对app的配置信息的存储,和一些简单的需要保存的数据的存储。
SharedPreferences常用的属性和方法
方法名称 | 描述 |
public abstract boolean contains (String key) | 判断SharedPreferences是否包含特定key的数据 |
public abstract SharedPreferences.Editor edit () | 返回一个Edit对象用于操作SharedPreferences |
public abstract Map<String, ?> 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/<package name>/shared_prefs下(这个面试常问到)
mode:是指定读写方式,其值有三种,分别为:
Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。
下面是我自己整理的SharedPreferences的使用接口,直接调用,很方便。希望帮到需要用的同志
package com.example.app; import android.content.Context; import android.content.SharedPreferences; public class Storage { private static final String SP_NAME = "flow_file"; public static final String TotalMobileRxBytes = "TotalMobileRxBytes"; public static final String LastMobileRxBytes = "LastMobileRxBytes"; public static final String hasSend = "hassend"; public static SharedPreferences getSharedPreferences(Context context){ SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_WORLD_READABLE); return sp; } public static void saveString(Context con, String key, String value){ SharedPreferences sp = getSharedPreferences(con); sp.edit().putString(key, value).commit(); } public static void saveBoolean(Context con, String key, boolean value){ SharedPreferences sp = getSharedPreferences(con); sp.edit().putBoolean(key, value).commit(); } public static void saveLong(Context con, String key, Long value){ SharedPreferences sp = getSharedPreferences(con); sp.edit().putLong(key, value).commit(); } public static Long getLong(Context context, String key) { return getSharedPreferences(context).getLong(key, 0); } public static String getString(Context context, String key) { return getSharedPreferences(context).getString(key, ""); } public static boolean getBlooean(Context context, String key) { return getSharedPreferences(context).getBoolean(key, false); } }