【问题标题】:Shared Preference gets updated only after app restart共享首选项仅在应用重启后更新
【发布时间】:2019-01-31 07:48:03
【问题描述】:

我在我的一项活动中存储了一个共享首选项。该首选项被存储,但是当该活动完成并返回到我检查存储的共享首选项的主要活动时,它返回 false(无共享首选项)。一次我重新启动了我的应用程序,在它声明的地方检查了相同的共享首选项,它有一些值。 简而言之,共享偏好值仅在应用重启后才会更新。

Main Activity(Calling Settings Activity):
 Intent intent = new Intent(Voiceanswer.this, SettingsActivity.class);
 startActivityForResult(intent, 108);


Settings Activity:(onCreate)
SharedPreferences.Editor editor=getSharedPreferences("trial",MODE_PRIVATE).edit();
    editor.putBoolean("flag",false);
    boolean trialflag=editor.commit();

设置活动结束:

SettingsActivity.this.finish();

主要活动(在简历上)

SharedPreferences voiceTemp=getSharedPreferences("trial",MODE_PRIVATE);

       if(voiceTemp.contains("flag"))
            Log.d(TAG, "Contains key flag");

      boolean trialflag=voiceTemp.getBoolean("flag",true);

App重启前,设置Activity完成后:

voiceTemp.contains("flag") returns false.
trialflag=true;

应用重启后:

voiceTemp.contains("flag") returns true.
trialflag=false;

【问题讨论】:

  • 尝试使用 apply() 而不是 commit?
  • 我尝试了应用和提交都没有运气。存储共享首选项值后,我手动检查首选项xml是否与这些值一起存储并且值在那里。所以存储没有问题,唯一的当它回到主要活动时,问题在于 retirving。

标签: android sharedpreferences


【解决方案1】:

https://riptutorial.com/android/example/4983/commit-vs--apply

如果此 SharedPreferences 上的另一个编辑器在 apply() 仍未完成时执行常规 commit(),则 commit() 将阻塞,直到所有异步提交(apply) 完成以及任何其他可能未决的同步提交.

【讨论】:

  • 正如您在上面的代码中看到的那样,我创建了共享偏好的新实例,甚至没有尝试重用它。所以不存在阻塞问题。
猜你喜欢
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多