如何创建一个特定的类使用SharedPreferences的目的是什么?
-
26-09-2019 - |
题
我在我的应用程序一对夫妇的活动,我想利用共享偏好。最初,我在每个活动创建的方法利用SharedPreferences,它工作得很好。然而,由于是使用相同数据的多个活动,我基本上每天进食在多个地方类似的方法。因此,它看起来像它更有意义专门创建一个类的处理所有这些方法的目的。
不幸的是,我不明白如何正确地做到这一点。
这不会编译,因为它说“getSharedPreferences是未定义的类型AppPrefs。”
public class AppPrefs {
public void foo() {
SharedPreferences settings = getSharedPreferences("MyAppPrefs", 0);
}
}
最后,我想,也许因为SharedPreferences是一个接口,我可以做到这一点,但后来我不得不实现继承的方法。我没有理由要覆盖任何这些方法,所以没有理由这样做任一
public class AppPrefs implements SharedPreferences {
public void foo() {
SharedPreferences settings = getSharedPreferences("MyAppPrefs", 0);
}
}
情理之中的事情在这里做什么?是否有一个概念,我缺少什么?谁能阐述和解释?感谢。
解决方案
通过您的上下文到您偏好吸气剂。
public class AppPrefs {
public static void foo(Context ctx) {
SharedPreferences settings = ctx.getSharedPreferences("MyAppPrefs", 0);
}
}
现在只是在this
通过从活动类foo()
其他提示
如果偏好是全球性的应用程序,你可以在需要访问共享偏好,使用PreferenceManager.getDefaultSharedPreferences();
。如果偏好特定Activities
的一个子集,你有一些不同的选择:
您可以由它需要访问喜好的所有类扩展一个Activity
子类:
public abstract class AbstractFooActivity extends Activity
{
protected SharedPreferences getFooPreferences()
{
return getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
}
private static final String PREFS_NAME = "FooPrefs";
}
public class AFooActivity extends AbstractFooActivity
{
public void aMethodThatNeedsPrefs()
{
// ...
SharedPreferences myPrefs = getFooPreferences();
}
}
或者,如果像我一样,你宁愿不与类层次结构的混乱,你可以简单地创建该组的活动,需要访问喜好的共同恒定值。这是在你有Activity
层次需要访问的首选项类外面的情况非常有用。例如,Service
。
public final class FooConstants
{
public static final String FOO_PREFS_NAME = "FooPrefs";
}
public class AFooActivity extends Activity
{
public void aMethodThatNeedsPrefs()
{
// ...
SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE);
}
}
public class AFooService extends Service
{
public void aMethodThatNeedsPrefs()
{
// ...
SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE);
}
}
第二种方法是略少封装,但在对象分层结构,这是在我看来良好折衷看跌期权的限制较少。
不隶属于 StackOverflow