我在Android中的SharedPreferences
遇到了很大的问题。一旦关闭应用程序,首选项就会将不需要的字符添加到我的一个字符串值中。实际上,这是一个可配置的转义序列。
我有一个简单的设置,一个MainActivity
包含
@Override
protected void onStart() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
sequence = prefs.getString("escape_sequence", "");
}
以及设置了该值的首选项屏幕。当我打开应用程序时,转到“偏好设置”屏幕,将值正确设置为
\n\n
,然后返回到MainActivity
,断点将序列正确显示为Java.lang.String, value(char[2])= "\n\n", count=2
。当我现在通过android studio重新启动应用程序时,代码中的相同断点突然显示:Java.lang.String, value(char[6])= "\n\n ", count=6
,包含4个空格和10个转义\u0000
字符。有人可以为什么这样吗?我能做些什么?
顺便说一句,到目前为止,我还没有在应用程序中的任何地方触摸SharedPreferences.Editor。我严格通过PreferencesScreen完成。因此,在应用程序中的任何地方都不会进行覆盖。默认值也不应该应用,但是无论如何设置都是
android:defaultValue="\n\n"
。编辑:
我发现了原因:如果首选项的末尾有换行符,则android会添加空格。我不知道为什么。
编辑:
这是自定义首选项代码:
public class SequencePreference extends DialogPreference {
EditText sequenceInput;
public SequencePreference(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.dialog_preference_sequence);
setPositiveButtonText(R.string.settings_sequence_ok);
setNegativeButtonText(R.string.settings_sequence_cancel);
setDialogIcon(null);
}
@Override
protected View onCreateDialogView() {
View view = super.onCreateDialogView();
sequenceInput= (EditText)view.findViewById(R.id.sequence_input);
return view;
}
@Override
protected void onDialogClosed(boolean positiveResult) {
// When the user selects "OK", persist the new value
if (positiveResult) {
String sequenceValue = new String( sequenceInput.getText().toString() );
String[] parts = sequenceValue.split("-");
if(parts.length == 2) {
persistString(parts[1]);
}
}
}
}
最佳答案
我认为这是Android API 18及更高版本中的错误,当SharedPreferences
字符串以\n
结尾时,会注入(inject)额外的空格。有关更多信息,请参见:
https://code.google.com/p/android/issues/detail?id=159799#c6
https://code.google.com/p/android/issues/detail?id=159799#c7