Android偏好添加不需要的字符
我对Android中的Android偏好添加不需要的字符,android,android-preferences,android-sharedpreferences,Android,Android Preferences,Android Sharedpreferences,我对Android中的SharedReferences有一个很大的问题。当应用程序关闭后,首选项会将不需要的字符添加到我的一个字符串值中。实际上,它是一个可配置的转义序列 我有一个简单的设置,一个main活动包含 @Override protected void onStart() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedReferences
有一个很大的问题。当应用程序关闭后,首选项会将不需要的字符添加到我的一个字符串值中。实际上,它是一个可配置的转义序列
我有一个简单的设置,一个main活动
包含
@Override
protected void onStart() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
sequence = prefs.getString("escape_sequence", "");
}
以及设置值的首选项屏幕。当我打开应用程序时,转到prefences屏幕,将值正确设置为\n\n
,然后返回MainActivity
,断点正确显示序列为Java.lang.String,值(char[2])=“\n\n”,count=2
。当我现在通过android studio重新启动应用程序时,代码中的同一断点突然显示:Java.lang.String,value(char[6])=“\n\n”,count=6
,包含4个空格和10个转义\u0000
字符
有人知道为什么会这样吗?我能做些什么
顺便说一句,到目前为止,我没有在应用程序的任何地方接触SharedReferences.Editor。我是严格通过首选屏幕完成的。因此,应用程序中的任何位置都不会进行覆盖。默认值也不应应用,但是设置仍然是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和更新版本中的一个缺陷,当
SharedReferences
字符串以\n
结尾时会注入额外的空白。有关详细信息,请参阅:
检索保存的字符串后,放置修剪()。 范例
String sequence2 = sequence.trim()
您是否查看了设备上的首选项文件?也许这是一个文件格式/权限问题,它被卡住了,不会被应用程序更新。嘿,谢谢你的评论。首先:为什么会发生这种情况,安卓偏好框架不能解决这个问题?但是除此之外,我想知道这个值首先来自哪里,而且我可以更改其他设置并保存它。我甚至试着改变了几个设置,包括令人不安的设置,但仍然可以将空格添加到一个设置中。所以我怀疑这是原因。安卓版本?测试/发布构建?模拟器/真实设备?它是发生在字符串类型的每个属性上,还是只发生在这个属性上?您尝试过不同的名称吗?它发生在真实设备(4.4.2,API 19)上,也发生在仿真器(即6.0,API 23)上,即android studio的调试构建中。仅此一串首选项会影响其他人的正常工作。重命名它会产生相同的结果,所以代码中可能真的有些东西。。。我使用自定义偏好,但我想这没什么特别的。我把它贴在上面,看起来应该没问题。我的Android有点生锈,但你们如何在文本编辑小部件中输入换行符呢?我记得它是单线的。api 29中也一样。对此我们能做些什么?