共享首选项值不会更新第二次android

时间:2017-02-06 11:29:54

标签: android android-fragments sharedpreferences event-bus

我使用广播接收器每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;
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用editor.apply()您正在进行异步操作,并且不会返回任何内容。 editor.commit()代替同步,如果保存有效则返回true,否则返回false。

文档here

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

答案 1 :(得分:0)

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