SharedPreferences不适用于所有活动
问题描述:
我试图在一个活动中保存一些过滤器/状态,然后在下一个活动中使用该数据。SharedPreferences不适用于所有活动
我使用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";
}
}
然后,应该使用这种偏好的活动:
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.Editor
秒。因此,价值没有被承诺。相反,你必须使用:
SharedPreferences.Editor spe = preferences.edit();
spe.putString(PreferenceKey.DISTANCE, distance);
spe.commit();
是因为在你的第二个活动的要求RestaurantFilterActivity.PreferenceKey.DISTANCE但在第一个活动,你将它保存FilterActivity.PreferenceKey.DISTANCE下?或者是一个错字:-) – Blundell 2011-03-26 12:07:21
您的日志输出实际上显示它没有得到保存开始。你是否检查过Double.toString(distance);是不是null? – Blundell 2011-03-26 12:08:37
错字,现在在问题中修复,对不起。 – barryred 2011-03-26 12:10:03