首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sharedPreferences不会在活动之间共享

sharedPreferences不会在活动之间共享
EN

Stack Overflow用户
提问于 2012-08-01 03:35:36
回答 5查看 26.7K关注 0票数 24

我正在尝试使用SharedPreferences保存设置。但我似乎无法在我的任何活动之间共享数据。我使用的代码确实可以保存设置,但每个活动似乎都有每个变量的自己版本。

举个例子。我有一个音频设置活动,在该活动中,用户可以为保存的变量"musicVolume“赋值。如果我关闭游戏并重新加载,那么音频设置活动就会“记住”这个值。但是,如果我尝试将该值加载到任何其他活动中,它将不起作用。但是,它们都可以加载和保存自己的同名变量。

这些是我用来保存变量的方法。在每个活动中都有这些方法的副本。**

正如我所说的,它们可以工作,但它们似乎只能读取和写入它们所在的单个活动的数据。

代码语言:javascript
运行
复制
public void SavePreferences(String key, float value) {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putFloat(key, value);
        editor.commit();
}

public void LoadPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        musicVolume = sharedPreferences.getFloat("musicVolume", (float)0.123);
        soundEffectsVolume = sharedPreferences
                        .getFloat("soundEffectsVolume", (float)0.123);
}

public void ClearPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
}

**我知道有更好的方法来做这件事,但我是一个非常新手的面向对象程序员。我试着听从另一个帖子的建议

Android Shared Preferences

但无论我想把台词放在哪里

代码语言:javascript
运行
复制
protected AppPreferences appPrefs;
appPrefs = new AppPreferences(getApplicationContext());

我得到了这样或那样的错误。但最重要的是,在阅读该帖子上的其他评论时,人们说SharedPreferences无论如何都是在同一个包内的活动之间自动共享的,这就是我认为它们是如何工作的。

EN

回答 5

Stack Overflow用户

发布于 2012-08-01 03:47:47

您正在使用getPreferences(MODE).使用getSharedPreferences("PREF_NAME",模式)。这样,您将为特定的首选项提供一个名称,然后您可以根据它的名称(这里是PREF_NAME)从您想要的任何活动中调用它。

代码语言:javascript
运行
复制
//------get sharedPreferences

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

//-------get a value from them

pref.getString("NAME", "Android");

//--------modify the value

pref.edit().putString("NAME", "Simone").commit();

//--------reset preferences

pref.edit().clear().commit();
票数 45
EN

Stack Overflow用户

发布于 2012-08-01 04:51:26

如前所述,使用getSharedPreferences(String name, int mode)而不是getPreferences (int mode)。具体地说,如果您感兴趣,这两种方法的文档说明了其中的区别。根据Android documentationgetPreferences(int)执行以下操作:

检索一个SharedPreferences对象,用于访问此活动专用的首选项。这只是通过传递此活动的类名作为首选项名称来调用底层的getSharedPreferences(String,int)方法。

票数 12
EN

Stack Overflow用户

发布于 2012-08-01 03:51:28

如果你对首选项不做任何花哨的事情,我只会使用默认的访问方式。这似乎是你的问题。

代码语言:javascript
运行
复制
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

这是一篇很棒的文章,有更多的细节,除了获取句柄之外,你做的每件事都是正确的。How do I get the SharedPreferences from a PreferenceActivity in Android?

另外:不要忘记新的方法是调用.apply()而不是.commit(),这在#io2012视频中是有的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11747687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档