Intereting Posts
   

Android偏好添加不需要的字符

我在Android中的SharedPreferences有一个很大的问题。 一旦应用程序关闭,首选项就会向我的一个字符串值添加不需要的字符。 实际上它是一个可配置的转义序列。

我有一个简单的设置,一个MainActivity包含

 @Override protected void onStart() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); sequence = prefs.getString("escape_sequence", ""); } 

以及设置值的首选项屏幕。 当我打开应用程序进入prefences屏幕时,将值正确设置为\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字符。

任何人都可以为什么会这样,我能做些什么呢?

顺便说一下,到目前为止,我还没有触及App中任何地方的SharedPreferences.Editor。 我是通过PreferencesScreen严格完成的。 因此,在应用程序的任何位置都不会进行覆盖。 也不应该应用默认值,但是设置是android:defaultValue="\n\n"无论如何。

编辑:

我find了原因:如果换行符位于首选项的末尾,则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结尾时会注入额外的空格。 有关更多信息,请参阅:

自由软件 :/ / / / / / / / / / /