【问题标题】:Howto read updated shared preferences?如何阅读更新的共享偏好?
【发布时间】:2012-07-07 21:39:40
【问题描述】:

我有两个活动:一个(SettingsActivity),它在 onStop() 中保存首选项,如下所示:

SharedPreferences.Editor editor = getSharedPreferences("myprefs", Context.MODE_PRIVATE).edit();

editor.putString("login", etLogin.getText().toString());
editor.putString("password", etPassword.getText().toString());

editor.commit();

第二个(MainActitivy),它在 onResume() 中读取它们,就像

SharedPreferences prefs = activity.getSharedPreferences("myprefs", Context.MODE_PRIVATE);
prefs.getString(...);

当我更改设置并返回主活动时,会加载旧值!我必须再次打开 SettingsActivity 并再次返回,才能进行更改。

onStop() 是否在 onResume() 旁边的单独线程中运行保存例程,因此在读取时,尚未提交更改?如何实现正确的行为?

肮脏的解决方案想法:我正在考虑一个单例,它包含我的偏好并具有 save() 和 load(),但这是一个丑陋的解决方案,我想知道如何正确地做到这一点。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    如果没有,SettingsActivity 是否已停止,您必须调用 finish();保存用户名和密码后调用 onstop() 方法(activity lifecycle)。

    如果您只是调用您的保存方法并通过点击返回按钮返回主活动,则不会触发 onStop() 方法。因为 SettingsActivity 仍在后台运行并暂停。

    【讨论】:

    • 是的,onStop() 已被调用。但它是在 onResume() 之后(或在其旁边运行)调用的
    • 我在 onStop() 中调用了记录器并打印了输出,所以我认为调用了 onStop()。
    • 您是否在 onStop() 和 onResume() 方法的末尾调用 super.onStop() 和 super.onResume() ?这可以解决您的问题吗!?
    • 是的,我同时调用它们,我尝试在保存/加载之前和之后调用它们,仍然一样:-(
    • 好的,我把它移到了 onPause() 并做了我之前提到的那个单例:-)
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多