sharedPreferences不会在活动之间共享

我试图使用SharedPreferences来保存设置。 但是我似乎无法让我的任何活动之间共享数据。 我正在使用的代码设法保存设置,但每个活动似乎有它自己的版本的每个variables。

所以例如。 我有一个audio设置活动,其中用户可以给一个variables“musicVolume”,这是保存的值。 如果closures游戏并重新加载,则audio设置活动“记住”该值。 但是,如果我尝试将该值加载到其他任何活动中,则不起作用。 但是,他们都可以加载并保存自己的同名variables。

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

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

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(); } 

**我知道有一个更好的方法来做到这一点,但我是一个非常新手的程序员。 我试图按照另一个线程的build议

Android共享首选项

但是我试图把线条放在哪里

 protected AppPreferences appPrefs; appPrefs = new AppPreferences(getApplicationContext()); 

我遇到了这样或那样的错误。 但最重要的是,阅读线程中的其他评论,人们都说SharedPreferences是在同一个包中的活动之间自动共享的,这正是我认为它们的工作原理。

Solutions Collecting From Web of "sharedPreferences不会在活动之间共享"

您正在使用getPreferences(模式) 。 改用getSharedPreferences(“PREF_NAME”,MODE) 。 这样你就可以提供一个特定的名字,然后你可以通过它的名字(PREF_NAME在这里)从你想要的任何活动中调用它。

 //------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(); 

如前所述,使用getSharedPreferences(String name, int mode)而不是getPreferences (int mode) 。 具体而言,如果您有兴趣,这两个方法的文档说明了差异。 根据Android文档 getPreferences(int)执行以下操作:

检索SharedPreferences对象,以访问此活动专用的首选项。 这只需调用基本的getSharedPreferences(String,int)方法即可传入此活动的类名称作为首选项名称。

如果你对喜好没有做任何事情,我只会使用默认的访问方式。 这似乎是你的问题。

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

这里有一个更详细的写作,除了获得你的句柄之外,你正在做的一切都非常正确。 如何从Android中的PreferenceActivity获取SharedPreferences?

另外:不要忘记新的方式是调用.apply()而不是.commit()这是在#io2012video中的一个。

你应该使用这个

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

要么

 SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); 

如果你遇到了一些问题,那很简单。 当你去保存喜好,保存像:

 SharedPreferences sp = getSharedPrefenreces("Preference",MODE_PRIVATE); 

和不:

  SharedPreferences sp = getSharedPrefenreces("Preference's name",Context.MODE_PRIVATE); 

我知道在某些情况下SharedPrefenrences有多重要。