gpt4 book ai didi

java - 创建 SharedPreferences 实用程序

转载 作者:行者123 更新时间:2023-11-29 21:05:48 24 4
gpt4 key购买 nike

这是我第一次在我的 Android 应用程序中使用 SharedPreferences。由于我将一遍又一遍地使用 SharedPreferences,因此我创建了一个名为 SharedPreferencesUtil 的实用程序类,其中包含许多允许我访问和修改值的静态方法.例如:

   /**
* This method is used to add an event that the user
* is looking forward to. We use the objectId of a ParseObject
* because every object has a unique ID which helps to identify the
* event.
* @param objectId The id of the ParseObject that represents the event
*/
public static void addEventId(String objectId){
assert context != null;
prefs = context.getSharedPreferences(Fields.SHARED_PREFS_FILE, 0);
// Get a reference to the already existing set of objectIds (events)
Set<String> myEvents = prefs.getStringSet(Fields.MY_EVENTS, new HashSet<String>());
myEvents.add(objectId);
SharedPreferences.Editor editor = prefs.edit();
editor.putStringSet(Fields.MY_EVENTS, myEvents);
editor.commit();
}

我有几个问题:
1. 使用实用程序类 SharedPreferencesUtil 是一个好的决定吗?
2.assert的使用是否正确?
3. 这就是我将 String 添加到集合中的方式吗?

最佳答案

总的来说,我认为像这样的实用类很好。我的一些建议是:

  1. 在 Application 的子类中初始化您的上下文(在 Application.onCreate() 中)并在您的实用程序类中存储对它的引用。如果您确保只使用应用程序上下文而不是 Activity 上下文,则不必担心内存泄漏,并且由于 SharedPreferences 不使用任何主题属性,因此无论如何都不需要使用 Activity 上下文。

  2. 如果您尝试在未初始化的情况下使用它,请检查并抛出一个异常警告,指出该类尚未初始化。这样您就不必担心检查空上下文。我将在下面展示一个示例。


public final class Preferences {
private static Context sContext;

private Preferences() {
throw new AssertionError("Utility class; do not instantiate.");
}

/**
* Used to initialize a context for this utility class. Recommended
* use is to initialize this in a subclass of Application in onCreate()
*
* @param context a context for resolving SharedPreferences; this
* will be weakened to use the Application context
*/
public static void initialize(Context context) {
sContext = context.getApplicationContext();
}

private static void ensureContext() {
if (sContext == null) {
throw new IllegalStateException("Must call initialize(Context) before using methods in this class.");
}
}

private static SharedPreferences getPreferences() {
ensureContext();
return sContext.getSharedPreferences(SHARED_PREFS_FILE, 0);
}

private static SharedPreferences.Editor getEditor() {
return getPreferences().edit();
}

public static void addEventId(String eventId) {
final Set<String> events = getPreferences().getStringSet(MY_EVENTS, new HashSet<String>());

if (events.add(eventId)) {
// Only update the set if it was modified
getEditor().putStringSet(MY_EVENTS, events).apply();
}
}

public static Set<String> getEventIds() {
return getPreferences().getStringSet(MY_EVENTS, new HashSet<String>());
}
}

基本上,这避免了您必须始终手头有上下文才能使用 SharedPreferences。相反,它始终保留对应用程序上下文的引用(前提是您在 Application.onCreate() 中对其进行了初始化)。

关于java - 创建 SharedPreferences 实用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com