如何在Activity之外使用sharedPreferences?

时间:2012-02-08 11:59:59

标签: android mvvm

我几个小时以来一直坚持这个非常简单的问题,而且我一直无法通过谷歌找到任何合适的解决方案。

我正在尝试在我的应用程序的模型层中使用SharedPreferences类。具体来说,我希望能够在应用程序启动时保存或获取用户名和相应的令牌(如果用户将应用程序设置为自动登录)。

有没有办法让我使用SharedPreferences来解决这个问题,还是我被迫使用FileInput / Output?

3 个答案:

答案 0 :(得分:28)

你在哪里实例化你的Model类?

只需将上下文或SharedPreferences传递给构造函数:

public class Model {
    private final Context context;
    private final SharedPreferences sharedPrefs;

    public Model(Context context) {
        this.context = context;
        sharedPrefs = context.getSharedPreferences("name", 0);
    }

    private String doSomething(){
        return sharedPrefs.getString("key", "defValue");
    }
}

答案 1 :(得分:4)

SharedPreferences不仅来自Activity,而是来自ContextActivity扩展),因此您也可以使用应用程序上下文。

答案 2 :(得分:0)

您可以使用包含Context的任何代码中的SharedPrederences。来自http://developer.android.com/reference/android/app/Activity.html的活动文档:

  

使用方法getPreferences(int)管理活动持久状态,允许您       检索和修改与活动关联的一组名称/值对。使用       跨多个应用程序组件共享的首选项(活动,       接收者,服务,提供者),你可以使用底层的Context.getSharedPreferences()       检索以特定名称存储的首选项对象的方法。 (注意它是       不可能跨应用程序包共享设置数据 - 为此你将       需要内容提供商。)