Android EditText:java.lang.IndexOutOfBoundsException:getChars(0 ... 16)结束超过长度15

时间:2016-05-04 15:04:59

标签: java android input android-edittext android-input-filter

我正在使用Android Studio开发适用于Android的应用。我必须让用户将文本插入到具有最大长度的EditText中。为了这个目的,我使用了一个lengthFilter传递给它的最大长度。

这里的声明:

etMessage.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxMessageLength)});

在另一个线程中,我执行以下代码:

while (!startEncoding){

    final String temp = etMessage.getText().toString();

    if (!(Comparison.equals(temp))) {
        Comparison = temp;
        handler.post(new Runnable() {
            @Override
            public void run() {
                tvNumCharacters.setText(Integer.toString(maxMessageLength - etMessage.length()));
            }
        });
    }
}

这些最后一行只是在TextView(tvNumCharacters)中显示当EditText(temp)中的字符串与之前包含在EditText(Compare)中的字符串不同时用户可以输入的剩余字符数。

问题是:当用户删除某些字符时(独立于已插入字符串的实际长度),会引发以下异常:

AndroidRuntime: FATAL EXCEPTION: Thread-8364
Process: com.user.steganography, PID: 12057
java.lang.IndexOutOfBoundsException: getChars (0 ... 16) ends beyond length 15
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1090)
at android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:972)
at android.text.SpannableStringBuilder.toString(SpannableStringBuilder.java:994)
at com.user.steganography.Coding.checkTextLength(Coding.java:111)
at com.user.steganography.Coding.access$000(Coding.java:19)
at com.user.steganography.Coding$2.run(Coding.java:84)
at java.lang.Thread.run(Thread.java:818)

有时只删除一个字符时会崩溃,只有在删除更多字符时才会崩溃。

召回etMessage.getText().toString()时会发生这种情况。

有人能建议我解决这个问题吗?我已经尝试更改属性android:inputType,但它仍无效。

2 个答案:

答案 0 :(得分:2)

您有线程问题。 etMessage的内容在第二次读取之前会被更改。

答案 1 :(得分:0)

[溶液]

通过使用addTextChangedListener(TextWatcher watcher)避免了线程问题,一切正常。