为什么这个共享偏好不会在屏幕旋转中持续存在?

时间:2014-11-18 06:15:22

标签: android sharedpreferences

根据logcat的调用顺序是onCreate,setViewValues,setStrikethroughFlag,(ROTATE),onCreate,setViewValues:

SharedPreferences mSettings;
Editor spEditor;
@Override
public void onCreate(Bundle savedInstanceState) {
   ....
   mSettings = getSharedPreferences("prefs", "")
   spEditor = mSettings.edit(); 
   setViewValues();
}

public void setViewValues() {
    boolean isStrikeThru = mSettings.getBoolean(STRIKETHROUGH, false);
    Log.d("TRACE", "setViewValues, strikethrough " + isStrikeThru);
}


public void setStrikethroughFlag() {
    spEditor.putBoolean(STRIKETHROUGH, true);
                    spEditor.commit();

}

logcat表示调用了setStrikethroughFlag()。然后我旋转屏幕,调用onCreate和setViewValues。在setViewValues中,我认为它会识别STRIKETHROUGH的保存值,为true。但logcat跟踪表明isStrikeThru的值为false。

3 个答案:

答案 0 :(得分:0)

从知道我可以看到,您在onCreate()中创建了局部变量 在您的setViewValues()中,您访问了您的类字段变量。 所以我不确定你是否在你的字段变量上调用getSharedPreferences()。 您的spEditor也是如此。解决此问题并再试一次。

如果这对您没有帮助,请提供其余代码。

更新

试试这个mSettings = getSharedPreferences("prefs", Context.MODE_PRIVATE);

答案 1 :(得分:0)

尝试从构造函数中调用setViewValues()。在屏幕方向更改时,将再次调用活动的oncreate并重置您的值。

答案 2 :(得分:0)

错误是在存储我的共享偏好时使用密钥周围的引号。钥匙没有匹配所以没有任何东西被持续存在,抱歉。