public class SharedPreferencesUtils {
private static volatile SharedPreferencesUtils sSharedPreferencesUtils;
private Map<String, SharedPreferences> mSharedPreferenceMap;
private SharedPreferencesUtils() {
mSharedPreferenceMap = new HashMap<>();
}
public static SharedPreferencesUtils getInstance() {
if (sSharedPreferencesUtils == null) {
synchronized (SharedPreferencesUtils.class) {
if (sSharedPreferencesUtils == null) {
sSharedPreferencesUtils = new SharedPreferencesUtils();
}
}
}
return sSharedPreferencesUtils;
}
public void init(Context context, String sharedPreferencesName) {
List<String> sharedPreferencesNames = new ArrayList<>();
sharedPreferencesNames.add(sharedPreferencesName);
init(context, sharedPreferencesNames);
}
public void init(Context context, List<String> sharedPreferencesNames) {
if (context == null) {
throw new NullPointerException("初始化的Context不能为null");
}
if (sharedPreferencesNames == null || sharedPreferencesNames.isEmpty()) {
throw new NullPointerException("SharedPreferences的集合不能为空");
}
for (String sharedPreferencesName : sharedPreferencesNames) {
checkNonemptyName(sharedPreferencesName);
mSharedPreferenceMap.put(sharedPreferencesName,
context.getSharedPreferences(sharedPreferencesName, Context.MODE_PRIVATE));
}
}
public void putData(String sharedPreferencesName, String key, Object value) {
checkNonemptyName(sharedPreferencesName);
SharedPreferences sharedPreferences = mSharedPreferenceMap.get(sharedPreferencesName);
if (sharedPreferences == null) {
return;
}
SharedPreferences.Editor editor = sharedPreferences.edit();
putData(editor, key, value);
editor.apply();
}
public void putDataMap(String sharedPreferencesName, Map<String, Object> dataMap) {
checkNonemptyName(sharedPreferencesName);
if (dataMap == null || dataMap.isEmpty()) {
return;
}
SharedPreferences sharedPreferences = mSharedPreferenceMap.get(sharedPreferencesName);
if (sharedPreferences == null) {
return;
}
SharedPreferences.Editor editor = sharedPreferences.edit();
for (Map.Entry<String, Object> entity : dataMap.entrySet()) {
putData(editor, entity.getKey(), entity.getValue());
}
editor.apply();
}
public void removeValueByKey(String sharedPreferencesName, String key) {
checkNonemptyName(sharedPreferencesName);
checkNonemptyName(key);
SharedPreferences sharedPreferences = mSharedPreferenceMap.get(sharedPreferencesName);
if (sharedPreferences == null) {
return;
}
sharedPreferences.edit()
.remove(key)
.apply();
}
public void clearAllData(String sharedPreferencesName) {
checkNonemptyName(sharedPreferencesName);
SharedPreferences sharedPreferences = mSharedPreferenceMap.get(sharedPreferencesName);
if (sharedPreferences == null) {
return;
}
sharedPreferences.edit()
.clear()
.apply();
}
@SuppressWarnings("unchecked")
public <T> T getValueByKey(String sharedPreferencesName, String key, T defaultValue) {
SharedPreferences sharedPreferences = mSharedPreferenceMap.get(sharedPreferencesName);
if (sharedPreferences == null) {
throw new NullPointerException("SharedPreferences为空");
}
if (defaultValue instanceof Byte) {
return (T)Byte.valueOf((byte)sharedPreferences.getInt(key, (Byte)defaultValue));
} else if (defaultValue instanceof Short) {
return (T)Short.valueOf((byte)sharedPreferences.getInt(key, (Short)defaultValue));
} else if (defaultValue instanceof Integer) {
return (T)(Integer)sharedPreferences.getInt(key, (Integer)defaultValue);
} else if (defaultValue instanceof Long) {
return (T)(Long)sharedPreferences.getLong(key, (Long)defaultValue);
} else if (defaultValue instanceof Float) {
return (T)(Float)sharedPreferences.getFloat(key, (Float)defaultValue);
} else if (defaultValue instanceof Double) {
return (T)Double.valueOf(String.valueOf(
sharedPreferences.getFloat(key, ((Double)defaultValue).floatValue())));
} else if (defaultValue instanceof Boolean) {
return (T)(Boolean)sharedPreferences.getBoolean(key, (Boolean)defaultValue);
} else if (defaultValue instanceof Character) {
String stringValue = sharedPreferences.getString(key, String.valueOf(defaultValue));
return (T)(Character)(stringValue == null ? ' ' : stringValue.charAt(0));
} else if (defaultValue instanceof String) {
return (T)sharedPreferences.getString(key, (String)defaultValue);
} else if (defaultValue instanceof Set<?>) {
return (T)sharedPreferences.getStringSet(key, (Set<String>)defaultValue);
} else {
throw new IllegalArgumentException("defaultValue的参数类型有误");
}
}
private void checkNonemptyName(String sharedPreferencesName) {
if (TextUtils.isEmpty(sharedPreferencesName)) {
throw new NullPointerException("SharedPreferences的名字不能为空");
}
}
@SuppressWarnings("unchecked")
private void putData(SharedPreferences.Editor editor, String key, Object value) {
checkNonemptyName(key);
if (value == null) {
throw new NullPointerException("数据不能为空");
}
if (value instanceof Byte) {
editor.putInt(key, (byte)value);
} else if (value instanceof Short) {
editor.putInt(key, (short)value);
} else if (value instanceof Integer) {
editor.putInt(key, (int)value);
} else if (value instanceof Long) {
editor.putLong(key, (long)value);
} else if (value instanceof Float) {
editor.putFloat(key, (float)value);
} else if (value instanceof Double) {
editor.putFloat(key, ((Double)value).floatValue());
} else if (value instanceof Boolean) {
editor.putBoolean(key, (boolean)value);
} else if (value instanceof Character) {
editor.putString(key, String.valueOf(value));
} else if (value instanceof String) {
editor.putString(key, (String)value);
} else if (value instanceof Set<?>) {
editor.putStringSet(key, (Set<String>)value);
} else {
throw new IllegalArgumentException("defaultValue的参数类型有误");
}
}
}