从不同活动访问SharedPreferences

时间:2013-01-03 12:50:14

标签: android

在第一个(MainActivity)中,我通过SharedPreferences保存数据:

Editor editor = mGameSettings.edit(); 
                editor.putString(GAME_PREFERENCES_SHOP, Shops.get(lv.getCheckedItemPosition())); 
                editor.commit();

我可以在重启应用程序后从MainActivity读取此数据:

if (mGameSettings.contains(GAME_PREFERENCES_SHOP)) 

                Tv2.setText(mGameSettings.getString(GAME_PREFERENCES_SHOP, ""));

但是如何从其他活动中读取和编辑此SharedPreferences?

3 个答案:

答案 0 :(得分:3)

将以下代码写入您的其他活动:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (sp.contains(MainActivity.GAME_PREFERENCES_SHOP)) //hoping that GAME_PREFERENCES_SHOP is a static constant defined in MainActivity
                Tv2.setText(sp.getString(MainActivity.GAME_PREFERENCES_SHOP, ""));

答案 1 :(得分:1)

您可以使用以下代码从不同的应用程序中获取首选项值

    Context launcherContext = null;
    try {
        final int flags = Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE;
        launcherContext = getApplicationContext().createPackageContext("com.another.package", flags);
    } catch (final NameNotFoundException e) {
        return ;
    }

    final SharedPreferences pref = launcherContext.getSharedPreferences(
            "prefname",
            Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS);

    final String prefValue = pref.getString("prefname", null);
    Log.i("test", prefValue);

答案 2 :(得分:0)

您可以使用same code进行阅读和编辑。您只需使用相同的Prefs文件名和key作为所需的值。 您可以在主活动中将Pref文件名声明为public static final String PREFS_NAME = "MyPrefsFile";,然后从应用程序的任何位置访问它。

示例,在其他活动中:

    SharedPreferences mGameSettings = getSharedPreferences(MainActivity.PREFS_NAME, MODE_PRIVATE);
    if (mGameSettings.contains(MainActivity.GAME_PREFERENCES_SHOP)) 
        Tv2.setText(mGameSettings.getString(MainActivity.GAME_PREFERENCES_SHOP, ""));