我的主要活动中的偏好不会改变

Posted

技术标签:

【中文标题】我的主要活动中的偏好不会改变【英文标题】:Preference wont change in my main activity 【发布时间】:2015-12-03 12:17:47 【问题描述】:

在我的 MainActivity 中,我有一个 textView。 在那个 textView 中有一个我保存在 SharedPreferences 中的数字。 每隔几分钟,SharedPreferences 就会被警报管理器更改, 但是我的 MainActivity 中的 SharedPreferences 不会改变, 有人知道为什么吗?

这是 MainActivity 中代码的一部分

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    int ReleaseDate = preferences.getInt("com.fisher.freedom.ReleaseDate", 0);
    TextView edit = (TextView) findViewById(R.id.DaysLeft);

    Toast.makeText(MainActivity.this, "" + preferences.getInt("com.fisher.freedom.ReleaseDate", 0), Toast.LENGTH_SHORT).show();
    edit.setText("" + ReleaseDate);

这是AlarmReceiver中的代码

公共静态最终字符串 ReleaseDate_Key = "com.fisher.freedom.ReleaseDate"; @覆盖 公共无效 onReceive(上下文上下文,意图意图) SharedPreferences 首选项 = PreferenceManager.getDefaultSharedPreferences(context); int ReleaseDate = preferences.getInt(ReleaseDate_Key, 0); SharedPreferences.Editor 编辑器 = preferences.edit(); editor.putInt(ReleaseDate_Key, --ReleaseDate); editor.apply();

【问题讨论】:

您在哪个事件处理程序中设置文本视图值? 我不认为它真的很重要,因为我也为这个值干杯,每次打开应用程序时,即使警报接收器中的值发生变化,值也是一样的 【参考方案1】:

要获取 int 的值,请使用:

SharedPreferences sharedPreferences = getSharedPreferences(getApplicationContext().getPackageName(),0);
int ReleaseDate = sharedPreferences.getInt("ReleaseDate",0);

要保存它,请使用:

SharedPreferences prefs = getSharedPreferences(getApplicationContext().getPackageName(), Context.MODE_PRIVATE);
prefs.edit().putInt("ReleaseDate", ReleaseDate).commit();

有了这个你就忘了在静态变量上写你的包名,它对我有用,所以它适合你。

【讨论】:

谢谢 但是我也遇到了同样的问题,在 MainActivity 中 sharedPreferences 的值没有改变,只有在我销毁然后重新启动应用程序时才会改变。 @cperez 你知道吗? apply()commit() 快​​,因为它是异步的并且不返回值,它需要 API Level 9+ 是的,我知道,谢谢 我解决了这个问题,SharedPreferences 值没有改变,因为在 Manifest 中接收者是远程的

以上是关于我的主要活动中的偏好不会改变的主要内容,如果未能解决你的问题,请参考以下文章

在偏好活动中静音

横向方向的android偏好活动填充

如何打开另一个活动而不会丢失主要活动布局上的项目?

Android从不同的活动改变背景颜色

If-else语句基于先前的活动选择来获取共享偏好

从 cellForRowAt 更新时,UITableViewCell 中的活动约束不会更新