SharePreferencesHelper
关于 SharedPreferences 的 commit 和apply 的关 系:
相同点:
- 1.都是将键值对数据保存到指定的 xm 文件里面去.
区别:
提交数据的区别
commit 是同步提交数据: 当有多个数据一起提交的时候,只有当前一个数据保存成功之后才会进行下一个. apply 首先将数据保存在内存里面, 当有数据被覆盖的时候直接会在内存里面覆盖掉,然后才会保存到硬盘里面去, 相对而言,apply 更快速一些
函数的返回值
commit 有是否成功返回值 , 当有需要使用到这个返回值来确认数据的完整性的时候这个地方可以直接使用到 apply 是直接void 的返回值,
- 但是大部分时候我们都不关系保存数据的返回. 所以大多时候我们完全可以使用 apply() 函数提交数据
//首选项帮助类, 提供了保存和获取首选项的功能.
public class SharePreferencesHelper {
private static SimpleArrayMap<String, SharePreferencesHelper> spArray = new SimpleArrayMap<String, SharePreferencesHelper>();
private static SharedPreferences sp;
public static SharePreferencesHelper getInstance(Context context) {
return getInstance(context, "");
}
public static SharePreferencesHelper getInstance(Context context, String spName) {
if (TextUtils.isEmpty(spName)) spName = "default_spUtil";
SharePreferencesHelper spUtil = spArray.get(spName);
if (spUtil == null) {
spUtil = new SharePreferencesHelper(context, spName);
spArray.put(spName, spUtil);
}
return spUtil;
}
private SharePreferencesHelper(Context context, String spName) {
sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
}
public void putString(@NonNull String key, Object value) {
applyValue(key, value);
}
public void putBoolean(@NonNull String key, Object value) {
applyValue(key, value);
}
public void putInt(@NonNull String key, Object value) {
applyValue(key, value);
}
public void putObject(@NonNull String key, Object value) {
applyValue(key, value);
}
public boolean syncPutString(@NonNull String key, Object value) {
return commitValue(key, value);
}
public boolean syncPutBoolean(@NonNull String key, Object value) {
return commitValue(key, value);
}
public boolean syncPutInt(@NonNull String key, Object value) {
return commitValue(key, value);
}
public boolean syncPutObject(@NonNull String key, Object value) {
return commitValue(key, value);
}
public String getString(@NonNull final String key) {
return getString(key, "");
}
public String getString(@NonNull final String key, @NonNull final String defaultValue) {
return sp.getString(key, defaultValue);
}
public int getInteger(@NonNull final String key, final int defaultValue) {
return sp.getInt(key, defaultValue);
}
public Boolean getBoolean(@NonNull final String key) {
return sp.getBoolean(key, false);
}
private boolean commitValue(@NonNull String key, Object value) {
SharedPreferences.Editor editor = saveData(key, value);
//断言, 当值 true 的时候才会向下执行.
assert editor != null;
return editor.commit();
}
private void applyValue(@NonNull String key, Object value) {
SharedPreferences.Editor editor = saveData(key, value);
//断言, 当值为 true 的时候才会向下执行.
assert editor != null;
editor.apply();
}
public boolean containKey(@NonNull String key) {
return sp.contains(key);
}
public void clearAll(){
sp.edit().clear().apply();
}
public void removeForKey(@NonNull final String key) {
sp.edit().remove(key).apply();
}
private SharedPreferences.Editor saveData(String key, Object value) {
SharedPreferences.Editor edit;
if (value != null) {
edit = sp.edit();
if (value instanceof String) {
edit.putString(key, (String) value);
} else if (value instanceof Boolean) {
edit.putBoolean(key, (Boolean) value);
} else if (value instanceof Integer) {
edit.putInt(key, (Integer) value);
} else {
edit.putString(key, String.valueOf(value));
}
return edit;
}
return null;
}
}
网友评论