什么是sharedPreferences?有什么用
SharedPreference是Android开发中一个轻量级的数据存储的方式,除了它还有SQLite数据库。它可以将数据以键值对的形式存放到文件中,在需要的时候再取出来使用。相比于去操作数据库,对于一些简单的数据使用SharedPreference更加方便,高效。
项目中使用:
(1)编写工具类
import android.content.Context;
import android.content.SharedPreferences;
import androidx.annotation.Nullable;
/**
* @function sharedPreference 工具类
*/
public final class SharedPreferenceUtil {
private static final String FILE_NAME = "config"; //文件名
private static SharedPreferenceUtil mInstance;
private SharedPreferenceUtil() {
}
public static SharedPreferenceUtil getInstance() {
if (mInstance == null) {
synchronized (SharedPreferenceUtil.class) {
if (mInstance == null) {
mInstance = new SharedPreferenceUtil();
}
}
}
return mInstance;
}
/**
* 存入键值对
*
* @param context
* @param key
* @param value
*/
public void put(Context context, String key, Object value) {
//判断类型
String type = value.getClass().getSimpleName();
SharedPreferences sharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
if ("Integer".equals(type)) {
editor.putInt(key, (Integer) value);
} else if ("Boolean".equals(type)) {
editor.putBoolean(key, (Boolean) value);
} else if ("Float".equals(type)) {
editor.putFloat(key, (Float) value);
} else if ("Long".equals(type)) {
editor.putLong(key, (Long) value);
} else if ("String".equals(type)) {
editor.putString(key, (String) value);
}
editor.apply();
}
/**
* 读取键的值,若无则返回默认值
*
* @param context
* @param key
* @param defValue 默认值
* @return
*/
@Nullable
public Object get(Context context, String key, Object defValue) {
SharedPreferences sharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
String type = defValue.getClass().getSimpleName();
if ("Integer".equals(type)) {
return sharedPreferences.getInt(key, (Integer) defValue);
} else if ("Boolean".equals(type)) {
return sharedPreferences.getBoolean(key, (Boolean) defValue);
} else if ("Float".equals(type)) {
return sharedPreferences.getFloat(key, (Float) defValue);
} else if ("Long".equals(type)) {
return sharedPreferences.getLong(key, (Long) defValue);
} else if ("String".equals(type)) {
return sharedPreferences.getString(key, (String) defValue);
}
return null;
}
/**
* 检查key对应的数据是否存在
*/
public boolean contains(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
return sp.contains(key);
}
}
(2)xml中按钮
(3)Activity中使用
首先我们定义一个方法来设置按钮的状态。我的方法实现大体思路是:先去查询有没有创建这个键值,如果返回的是true则没有,那我们先去创建这个键值,以及设置它的一个默认状态为开启。如果是false,说明有值,那我们不必创建了,直接判断true还是false,设置状态。这个方法是一个初始化方法,在应用刚下载时调用。当然对于这个方法的调用应该放在onCreate中
除了初始化的判断,我们应该还要对按钮后续的点击操作进行保存和切换状态。
主要是对这个按钮的点击事件的监听,具体的思路参考上个方法。
效果: