简体   繁体   English

SharedPreferences无法跨活动工作

[英]SharedPreferences not working across Activities

I'm trying to save some filters/state in one activity, and then use that data in the next activity. 我正在尝试在一个活动中保存一些过滤器/状态,然后在下一个活动中使用该数据。

I'm using SharedPreferences, but it isn't working as I'd expected it to. 我正在使用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";
  }
}

Then, the Activity that should use this preference: 然后,应该使用此首选项的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);
  }
}

But the output I get is: 但我得到的输出是:


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

Can anyone tell me what I'm doing wrong here? 谁能告诉我这里我做错了什么?

I am developing against API Level-8. 我正在针对API Level-8进行开发。

In the following two lines, 在以下两行中,

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

two different SharedPreferences.Editor s are being returned. 正在返回两个不同的SharedPreferences.Editor Hence the value is not being committed. 因此,价值没有得到承诺。 Instead, you have to use: 相反,你必须使用:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM