【问题标题】:Strange Shared Preference on AndroidAndroid 上的奇怪共享偏好
【发布时间】:2012-09-25 08:24:19
【问题描述】:

我有 2 个Fragments1st 用于计算,2nd 用于设置。

我在onPause() 方法上使用SharedPreference.Editor.commit() 保存设置。到目前为止,储蓄没有问题。我面临的问题是在我的1st Fragment 上检索SharedPreference 值。每次按下count 按钮时,我都会检索该值。第一次,我得到的值是更改前的值(这是我面临的问题),我只会在第二次或更多次检索/按下count 按钮时获得我保存的值。

我尝试更改设置,然后按home 按钮从外部终止应用程序(触发onPause 方法),当我重新打开设置时,值确实更改为我定义的设置。所以,我确信当onPause 被触发时设置确实被保存了。

我想知道这里出了什么问题。非常感谢任何帮助。

根据要求,这是我在SettingFragment 上的保存代码:

@Override
public void onPause() {
        super.onPause();
        saveToPref();
    }

public void saveToPref() {
        SharedPreferences settings = getActivity().getSharedPreferences("mysettings", 0);
        Editor edit = settings.edit();
        edit.putString("begin", String.valueOf(ibegin)).putString("end", String.valueOf(iend)).commit();
    }

【问题讨论】:

  • @SherifelKhatib 添加了它
  • 1. Are you sure the return value of commit() is true?。 2.Are you sure that ibegin and iend are always up-to-date?
  • 我假设您是第一次保存旧值。
  • 是的,因为我在1st fragment 上第二次按下count 按钮时检索到的值是我保存的值。问题是我第一次检索,值是保存前的值。
  • 第一次尝试将值更改为 V1,然后第二次更改为 V2。当您检查这些值时,您会得到 V1 还是 V2?

标签: android android-fragments sharedpreferences


【解决方案1】:

在其他地方初始化您的 SharedPreferences 对象,然后执行一次 - 可能在 onCreate 中。您没有看到更改的原因是因为 SharedPreferences 的不同实例在某处打开,具有相同的构造函数,并且这些实例的多个实例不会自动解析/合并。在此过程中,初始化编辑器edit 实例以及settings

【讨论】:

  • 我尝试在我的MainActivity 上初始化它并使用setter 和getter 来获取SharedPreference 但仍然有问题。
【解决方案2】:

好的,我找到了我的问题。问题是onPause() 仅在我开始另一个活动时触发(我开始了onClick 的活动Button count)。我更改了代码以通过覆盖我的ViewPageronPageSelected 和我的backPressedMainActivity 来触发saveToPref()

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2019-06-20
    • 2012-10-24
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多