加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – SharedPreferences无法跨活动工作

发布时间:2020-12-15 08:39:11 所属栏目:Java 来源:网络整理
导读:我正在尝试在一个活动中保存一些过滤器/状态,然后在下一个活动中使用该数据. 我正在使用SharedPreferences,但它没有像我预期的那样工作. public class FilterActivity extends Activity { private static final String TAG = FilterActivity.class.getName()
我正在尝试在一个活动中保存一些过滤器/状态,然后在下一个活动中使用该数据.

我正在使用SharedPreferences,但它没有像我预期的那样工作.

public class FilterActivity extends Activity {

  private static final String TAG = FilterActivity.class.getName();

  EditText distanceEditor;

  @Override
  public void onPause() {
    super.onPause();
    SharedPreferences preferences = getSharedPreferences(PreferenceKey.FILTER_PREFERENCES_NAME,MODE_WORLD_READABLE);
    String distance = distanceEditor.getText().toString();
    preferences.edit().putString(PreferenceKey.DISTANCE,distance);
    preferences.edit().commit();
    Log.i(TAG,"Wrote max-distance=" + distance);

    Log.i(TAG,"Preferences contains distance=" + preferences.getString(PreferenceKey.DISTANCE,"FAIL"));
  }


  public static class PreferenceKey {
    public static final String FILTER_PREFERENCES_NAME = "FilterActivity:" + "Filter_Preference_File";
    public static final String DISTANCE = "FilterActivity:" + "DISTANCE";
  }
}

然后,应该使用此首选项的Activity:

public class MapActivity  extends MapActivity {
  @Override
  public void onResume() {
    super.onResume();

    SharedPreferences preferences = getSharedPreferences(FilterActivity.PreferenceKey.FILTER_PREFERENCES_NAME,MODE_WORLD_READABLE);
    String maxDistance = preferences.getString(FilterActivity.PreferenceKey.DISTANCE,"FAIL");

    Log.i(TAG,"Read max-distance=" + maxDistance);
  }
}

但我得到的输出是:

.FilterActivity( 4847): Wrote max-distance=99.9
.FilterActivity( 4847): Preferences contains distance=FAIL
.MapActivity( 4847): Read max-distance=FAIL

谁能告诉我这里我做错了什么?

我正在针对API Level-8进行开发.

解决方法

在以下两行中,

preferences.edit().putString(PreferenceKey.DISTANCE,distance);
preferences.edit().commit();

正在返回两个不同的SharedPreferences.Editors.因此,价值没有得到承诺.相反,你必须使用:

SharedPreferences.Editor spe = preferences.edit();
spe.putString(PreferenceKey.DISTANCE,distance);
spe.commit();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读