Java 共享引用不跨活动工作
我试图在一个活动中保存一些过滤器/状态,然后在下一个活动中使用这些数据 我正在使用SharedReferences,但它并没有像我预期的那样工作Java 共享引用不跨活动工作,java,android,sharedpreferences,Java,Android,Sharedpreferences,我试图在一个活动中保存一些过滤器/状态,然后在下一个活动中使用这些数据 我正在使用SharedReferences,但它并没有像我预期的那样工作 public class FilterActivity extends Activity { private static final String TAG = FilterActivity.class.getName(); EditText distanceEditor; @Override public void onPau
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();
返回两个不同的SharedReference.Editor
s。因此,没有提交该值。相反,您必须使用:
SharedPreferences.Editor spe = preferences.edit();
spe.putString(PreferenceKey.DISTANCE, distance);
spe.commit();
是因为在第二个活动中,您请求RestaurantFilterActivity.PreferenceKey.DISTANCE,但在第一个活动中,您将其保存在FilterActivity.PreferenceKey.DISTANCE下?或者这是一个输入错误:-)您的日志输出实际上显示它没有被保存。你检查过两次了吗;不是空的吗?输入错误,现在问题已经解决了,对不起。您需要其他应用程序来读取您的首选项吗?对于首选项模式,我只需要0或MODE_PRIVATE。p、 我还将super.onPause()移到Activity方法的底部。因为您希望在应用程序开始清理暂停之前运行特定于活动的代码。这就解决了!非常感谢。我看到的示例确实使用了您建议的模式,但没有意识到这是一个要求。我真傻。非常感谢。您还可以使用一行代码:
preferences.edit().putString(PreferenceKey.DISTANCE,DISTANCE.commit()代码>