最近有点懒了,虽然工作不太忙,但是也没去写东西了,进入新的月份了,不能继续懒惰了,奋斗吧,骚年!
今天来分享一个关于SharedPreferences的使用技巧,SharedPreferences是Android提供的一个轻量级的数据存储类,我们可以利用它的api来存储一些简单的配置信息。关于SharedPreferences的基本用法,网上有很多,我这里就不做说明了,如果有不懂的请自行百度或者谷歌相关资料,进行学习,今天我要讲的是关于SharedPreferences的封装。我们平时的开发中肯定是不止一次的会用到SharedPreferences这个类来保存一些信息,所以如果每次都按照基本方法写一遍,代码冗余量太大,所以我们应该将它的相关操作封装起来,不仅简化代码,也方便统一管理。我这里的基本思路是采用单例模式,提供一个管理类SPManager.java,采用公共静态方法的形式将相关的put和get操作都封装到该类里面,外部直接通过类名.方法名的方式进行调用,下面来看具体代码:
一、既然是单例模式,那么老规矩三段式:
1、创建私有的静态的本类对象,即当前类的实例:
//创建当前类的实例
private static SPManager mInstance;
private static SharedPreferences sp;
private static SharedPreferences.Editor editor;
2、创建私有的构造方法,在方法里我们拿到sp对象,并通过sp对象拿到editor对象:
//私有的构造这里补充说明一下获取sp对象时传入的两个参数,第一个参数是我们自己定义的配置文件名称,第二个是数据的操作模式,这里定义为私有模式:
private SPManager() {
sp = BaseApplication.getContext()
.getSharedPreferences(SHARE_PREFERENCE_NAME,
Context.MODE_PRIVATE);
editor = sp.edit();
}
//文件名3、创建公共的静态的返回本类对象的方法:
private static final String SHARE_PREFERENCE_NAME = "zdjfu.pre";
//线程安全的返回本类对象的方法二、接下来是一系列的put和get操作,就是写入和获取不同数据类型的数据,这里我用int类型数据来做个示例,完整代码会在文章末尾为大家附上:
public static SPManager getInstance() {
if (mInstance == null) {
synchronized (SPManager.class) {
if (mInstance == null) {
mInstance = new SPManager();
}
}
}
return mInstance;
}
//对int类型数据的写入按照不同数据类型分别创建相应的方法即可完成数据的读写操作。
public void putInt(String key, int value) {
editor.putInt(key, value);
editor.commit();
}
//对int类型数据的读取
public int getInt(String key, int defaultValue) {
return sp.getInt(key, defaultValue);
}
三、完成以上操作之后,就是我们的使用了,下面来说说如何使用,这里也是举个实例给大家,我这里要存储一个String类型的数据,那么我首先在类中定义了一个key,用来标识这次的数据存储操作,代码如下:
//设备Token接着在需要保存数据的地方,调用SPManager中的putString方法,按照key-value的形式将数据保存即可,代码如下:
public static final String DEVICE_TOKEN = "device_token";
//将设备token存储到sp中可以看到传入了两个参数,前面的是我们定义的key,后面的是我们要保存的数据值,这样我们就完成了数据存储操作。
SPManager.getInstance().putString(SPManager.DEVICE_TOKEN, device_token);
当我们需要用到之前保存的数据时,我们只要调用getString方法即可,代码如下:
//读取保存的设备Token信息这样我们就完成了数据的读写操作,通过我们的封装,使得代码更简洁,并且更具有可读性了,实现的原理本质上是一样的。
LogUtil.e("archie", SPManager.getInstance()
.getString(SPManager.DEVICE_TOKEN,""));
下面附上SPManager.java的源码:
package com.zdjfu.android.database;写的比较仓促,有不对的地方欢迎朋友们批评指正!
import android.content.Context;
import android.content.SharedPreferences;
import com.zdjfu.android.application.BaseApplication;
/**
* 项目名: ZDJFUProject
* 包名: com.zdjfu.android.database
* 文件名: SPManager
* 创建者: Jarchie
* 创建时间: 17/5/29 下午4:27
* 描述: 配置文件工具类
*/
public class SPManager {
//创建当前类的实例
private static SPManager mInstance;
private static SharedPreferences sp;
private static SharedPreferences.Editor editor;
//文件名
private static final String SHARE_PREFERENCE_NAME = "zdjfu.pre";
//设备Token
public static final String DEVICE_TOKEN = "device_token";
//注册设备Token
public static final String REGISTER_TOKEN = "is_um_register";
//线程安全的返回本类对象的方法
public static SPManager getInstance() {
if (mInstance == null) {
synchronized (SPManager.class) {
if (mInstance == null) {
mInstance = new SPManager();
}
}
}
return mInstance;
}
//私有的构造
private SPManager() {
sp = BaseApplication.getContext()
.getSharedPreferences(SHARE_PREFERENCE_NAME,
Context.MODE_PRIVATE);
editor = sp.edit();
}
//对int类型数据的写入
public void putInt(String key, int value) {
editor.putInt(key, value);
editor.commit();
}
//对int类型数据的读取
public int getInt(String key, int defaultValue) {
return sp.getInt(key, defaultValue);
}
//对long类型数据的写入
public void putLong(String key, Long value) {
editor.putLong(key, value);
editor.commit();
}
//对long类型数据的读取
public long getLong(String key, int defaultValue) {
return sp.getLong(key, defaultValue);
}
//对string类型数据的写入
public void putString(String key, String value) {
editor.putString(key, value);
editor.commit();
}
//对string类型数据的读取
public String getString(String key, String defaultValue) {
return sp.getString(key, defaultValue);
}
//对float类型数据的写入
public void putFloat(String key, float value) {
editor.putFloat(key, value);
editor.commit();
}
//对float类型数据的读取
public float getFloat(String key, float defaultValue) {
return sp.getFloat(key, defaultValue);
}
//对boolean类型数据的写入
public void putBoolean(String key, boolean value) {
editor.putBoolean(key, value);
editor.commit();
}
//对boolean类型数据的读取
public boolean getBoolean(String key, boolean defaultValue) {
return sp.getBoolean(key, defaultValue);
}
//判断key是否存在
public boolean isKeyExist(String key) {
return sp.contains(key);
}
//删除单个数据,按照key类型
public void remove(String key) {
editor.remove(key);
editor.commit();
}
//删除所有数据
public void removeAllSPData() {
editor.clear().commit();
}
}