Android - SharedPreference错误

时间:2013-07-16 17:56:31

标签: android sharedpreferences

问题:活动B总是返回false,但是,如果我在活动A中检查相同的KEY,则结果为true。为什么是这样?我检查了KEY,两个活动完全一样。

编辑:谢谢大家的帮助,但在实施建议后,我仍然没有运气。这就是我现在所拥有的:

ActivityA, extends Activity Implements OnGesturePerformedListener

//How methods are called...
read(getApplicationContext(),"fav", posName);
write(getApplicationContext(), "fav", posName, false);
...

public Boolean read(Context context, String name, String key) {
    SharedPreferences sP = context.getSharedPreferences(name, MODE_PRIVATE);
    Boolean b = sP.getBoolean(key, false);
    return b;
}

public void write(Context context, String name, String key, boolean value) {
    SharedPreferences sP = context.getSharedPreferences(name, MODE_PRIVATE);
    SharedPreferences.Editor editor = sP.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

ActivityB, extends FragmentActivity,子类:

public static class SectionFragment extends Fragment

内部onActivityCreated()

SharedPreferences sP = getActivity().getSharedPreferences("fav", MODE_PRIVATE);
Boolean b = sP.getBoolean(posName, false);

结果= b始终等于false

任何想法?

3 个答案:

答案 0 :(得分:2)

使用getSharedPreferences`:

public void write(Context context, String key, boolean value) {

    SharedPreferences sharedPreferences = context.getSharedPreferences(
            NAME_SHAREDPREFERENCES, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

public Boolean read(Context context, String key) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(
            NAME_SHAREDPREFERENCES, MODE_PRIVATE);
    Boolean b = sharedPreferences.getBoolean(key, false);
    return b;
}

答案 1 :(得分:2)

来自Android文档:

  

使用方法getPreferences(int)管理活动持久状态,允许您检索和修改与活动关联的一组名称/值对。 要使用在多个应用程序组件(活动,接收器,服务,提供程序)之间共享的首选项,您可以使用基础Context.getSharedPreferences()方法来检索以特定名称存储的首选项对象。   (http://developer.android.com/reference/android/app/Activity.html

所以基本上你需要使用Context.getSharedPreferences()来分享多个活动的偏好。

答案 2 :(得分:0)

您可以采用以下方法在任何地方获取相同的sharedPreference:

SharedPreference mPrefs =  PreferenceManager.getDefaultSharedPreference(getApplicationContext());
 SharedPreference.Editor mEditor = mPrefs.edit();

我希望它很有用。