上篇文章介绍了SharedPreferences读写问题。这里介绍下如何在不同的activity中访问SharedPreferences,以及如何直接访问任何可以访问的SharedPreferences。比如对于上篇文章方法3存储的SharedPreferences如何在Activity中进行访问
1、不同Activity中访问SharedPreferences
这个比较简单,同在一个Activity中一样,比如在A Activity中
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
editor.commit(); //一定要记得提交
在B Activity中需要获得silentMode对应的值。只需要
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
//或者使用 SharedPreferences settings = getPreferences(0);
boolean silent = settings.getBoolean("silentMode", false);
2、用android.preference.Preference.getSharedPreferences()存储的SharedPreferences如何在Activity中进行访问
如在一个继承了ListPreference的类中
public void setValue(String value) {
SharedPreferences settings = getSharedPreferences();
SharedPreferences.Editor editor = settings.edit();
editor.putString(SNSWEBSITESELECTEDNAME, value);
editor.commit();
}
我们在一个Activity中如何获得这里面保存的SharedPreferences呢。
这里我们再次了解下SharedPreferences的实质,SharedPreferences实际是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。而getSharedPreferences (String name, int mode)的name为preferences file名,所以说我们只要能得到上面getSharedPreferences()保存的SharedPreferences名就可以获取其保存的SharedPreferences了。
public String getValue() {
SharedPreferences settings = getSharedPreferences();
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
return settings.getString(SNSWEBSITESELECTEDNAME, "");
}
注意第三行的preferencesName值,他就表示SharedPreferences的全名。如我们得到的是com.aaa.bb.activity_preferences,那么我们直接在activity中就可以得到该值
SharedPreferences settings = getSharedPreferences("com.aaa.bb.activity_preferences", 0);
String savaString = settings.getString(SNSWEBSITESELECTEDNAME, "");
参考: