我在我的应用程序一对夫妇的活动,我想利用共享偏好。最初,我在每个活动创建的方法利用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);
    }
}

第二种方法是略少封装,但在对象分层结构,这是在我看来良好折衷看跌期权的限制较少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top