Android EditText: java.lang.IndexOutOfBoundsException: getChars (0 ... 16) 结束超过长度 15
Android EditText: java.lang.IndexOutOfBoundsException: getChars (0 ... 16) ends beyond length 15
我正在使用 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()));
}
});
}
}
当 EditText (temp) 中的字符串与之前包含在 EditText (Compare) 中的字符串不同时,这些最后几行只是在 TextView (tvNumCharacters) 中显示用户可以输入的剩余字符数。
问题是:当用户删除一些字符(与已插入字符串的实际长度无关)时,会引发以下异常:
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[=14=]0(Coding.java:19)
at com.user.steganography.Coding.run(Coding.java:84)
at java.lang.Thread.run(Thread.java:818)
有时只删除一个字符时会崩溃,其他的只会在删除更多字符时崩溃。
召回 etMessage.getText().toString()
时会发生这种情况。
有人可以建议我解决这个问题吗?我已经尝试更改属性 android:inputType
但它仍然不起作用。
您有线程问题。 etMessage的内容在第二次读取之前发生了变化
[解决方案]
通过使用 addTextChangedListener(TextWatcher watcher)
避免了线程问题,一切正常。
我正在使用 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()));
}
});
}
}
当 EditText (temp) 中的字符串与之前包含在 EditText (Compare) 中的字符串不同时,这些最后几行只是在 TextView (tvNumCharacters) 中显示用户可以输入的剩余字符数。
问题是:当用户删除一些字符(与已插入字符串的实际长度无关)时,会引发以下异常:
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[=14=]0(Coding.java:19)
at com.user.steganography.Coding.run(Coding.java:84)
at java.lang.Thread.run(Thread.java:818)
有时只删除一个字符时会崩溃,其他的只会在删除更多字符时崩溃。
召回 etMessage.getText().toString()
时会发生这种情况。
有人可以建议我解决这个问题吗?我已经尝试更改属性 android:inputType
但它仍然不起作用。
您有线程问题。 etMessage的内容在第二次读取之前发生了变化
[解决方案]
通过使用 addTextChangedListener(TextWatcher watcher)
避免了线程问题,一切正常。