【问题标题】:Shared preferences value not updating the second time android共享偏好值不更新第二次android
【发布时间】:2017-02-06 11:29:53
【问题描述】:

我使用广播接收器每 24 小时更改一次片段中的变量值。

由于在片段重新启动时变量的值被重新初始化为之前的初始化,因此我每次都使用共享首选项来保存该值,这样它就不会一次又一次地重新初始化。

问题是该值已更改一次并且不再更新。所以如果值为 10,它会变为 11,但不会变为 12。

这是广播接收器

public class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

    String intentImageName = intent.getStringExtra("imageName");
    int numberImageName = Integer.parseInt(intentImageName) +1;
    EventBus.getDefault().post(new ImageNameEvent(""+numberImageName));;

}

这是片段中用来从BroadcastReceiver获取值的EventBus函数

  @Subscribe
public void onEvent(ImageNameEvent event) {
    imagename = Integer.parseInt(event.getMessage());
    SharedPreferences.Editor editor = preferences.edit();
    editor.putInt("image", imagename);
    editor.apply();
}

这是获取共享首选项值的 Fragment 的 onCreate 函数。

    @Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    scheduleAlarm();

    preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
    int name = preferences.getInt("image", 0);
    if (name != 0) {
        imagename = name;
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • 您是否考虑过为此使用 SharedPreferenceChangeListener?

标签: android android-fragments sharedpreferences event-bus


【解决方案1】:

使用editor.apply() 您正在执行异步操作,并且不会返回任何内容。 editor.commit() 是同步的,如果保存成功则返回 true,否则返回 false。

文档here

因此您可以尝试将apply() 更改为commit(),看看它返回的是true 还是false。

【讨论】:

    【解决方案2】:

    使用 editor.commit() 代替 editor.apply() 不太确定原因,但它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2019-06-20
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多