Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android偏好添加不需要的字符_Android_Android Preferences_Android Sharedpreferences - Fatal编程技术网

Android偏好添加不需要的字符

Android偏好添加不需要的字符,android,android-preferences,android-sharedpreferences,Android,Android Preferences,Android Sharedpreferences,我对Android中的SharedReferences有一个很大的问题。当应用程序关闭后,首选项会将不需要的字符添加到我的一个字符串值中。实际上,它是一个可配置的转义序列 我有一个简单的设置,一个main活动包含 @Override protected void onStart() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

我对Android中的
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中也一样。对此我们能做些什么?