![](/img/trans.png)
[英]How can I create a SharedPreferences Helper class that can save instantly in Android
[英]How do I create a class specifically for the purpose of using SharedPreferences?
我的应用程序中有一些活动,希望利用共享的首选项。 最初,我在每个活动中创建了一个方法来使用SharedPreferences,它运行良好。 但是,由于有多个活动使用相同的数据,我基本上在多个地方隐藏类似的方法。 因此,为处理所有这些方法而专门创建一个类似乎更有意义。
不幸的是,我不知道如何正确地做。
这不会编译,因为它说“对于AppPrefs类型,未定义getSharedPreferences”。
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);
}
}
这里有什么意义吗? 我错过了一个概念吗? 任何人都可以详细说明吗? 谢谢。
如果首选项对应用程序是全局的,则可以使用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);
}
}
第二种方法的封装稍微少一些,但对对象层次结构的限制较少,这在我看来是一个很好的权衡。
将您的上下文传递到您的偏好获取器中。
public class AppPrefs {
public static void foo(Context ctx) {
SharedPreferences settings = ctx.getSharedPreferences("MyAppPrefs", 0);
}
}
现在只需将this
从活动类传递给foo()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.