我正在做SharedPreferences助手类,以使我的代码看起来不错.
public class SharedPreferencesHelper {
Context context;
public SharedPreferencesHelper(Context context){
this.context = context;
}
public boolean isLogged(String prefs){
return context.getSharedPreferences(prefs,Context.MODE_PRIVATE)
.getBoolean("LOGGED",false);
}
public void setLogged(String prefs){
context.getSharedPreferences(prefs,Context.MODE_PRIVATE)
.edit().putBoolean("LOGGED",true).apply();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我应该将这些方法设置为静态并在每个方法中初始化SharedPreferences或更好地保留它不是静态的,并从我的其他类中调用一次SharedPreferencesHelper类吗?谢谢
用这个 :
public class SharedPreferencesHelper {
public static final String FILE_NAME = "APP_PREFERENCES";
public static void put(Context context, String key, Object object) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (object instanceof String) {
editor.putString(key, (String) object);
} else if (object instanceof Integer) {
editor.putInt(key, (Integer) object);
} else if (object instanceof Boolean) {
editor.putBoolean(key, (Boolean) object);
} else if (object instanceof Float) {
editor.putFloat(key, (Float) object);
} else if (object instanceof Long) {
editor.putLong(key, (Long) object);
} else {
editor.putString(key, object.toString());
}
SharedPreferencesCompat.apply(editor);
}
public static Object get(Context context, String key, Object defaultObject) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
if (defaultObject instanceof String) {
return sp.getString(key, (String) defaultObject);
} else if (defaultObject instanceof Integer) {
return sp.getInt(key, (Integer) defaultObject);
} else if (defaultObject instanceof Boolean) {
return sp.getBoolean(key, (Boolean) defaultObject);
} else if (defaultObject instanceof Float) {
return sp.getFloat(key, (Float) defaultObject);
} else if (defaultObject instanceof Long) {
return sp.getLong(key, (Long) defaultObject);
}
return null;
}
public static void remove(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.remove(key);
SharedPreferencesCompat.apply(editor);
}
public static void clear(Context context) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
SharedPreferencesCompat.apply(editor);
}
public static boolean contains(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
return sp.contains(key);
}
public static Map<String, ?> getAll(Context context) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
return sp.getAll();
}
private static class SharedPreferencesCompat {
private static final Method sApplyMethod = findApplyMethod();
@SuppressWarnings({"unchecked", "rawtypes"})
private static Method findApplyMethod() {
try {
Class clz = SharedPreferences.Editor.class;
return clz.getMethod("apply");
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return null;
}
public static void apply(SharedPreferences.Editor editor) {
try {
if (sApplyMethod != null) {
sApplyMethod.invoke(editor);
return;
}
} catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
editor.commit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不会保留对上下文的引用。我宁愿将SharedPreference和 it保留Editor为辅助类的静态成员。这样,您就不需要SharedPreferencesHelper每次需要读/写SharedPreference. 更进一步,当您第一次访问助手本身时,将使用 Application Context(带有您的自定义 Application 子类)来初始化SharedPreference和。Editor这就是我塑造它的方式
| 归档时间: |
|
| 查看次数: |
5049 次 |
| 最近记录: |