Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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
java.lang.IndexOutOfBoundsException:设置范围(N…N)结束长度超过10500_Java_Android_Android Edittext - Fatal编程技术网

java.lang.IndexOutOfBoundsException:设置范围(N…N)结束长度超过10500

java.lang.IndexOutOfBoundsException:设置范围(N…N)结束长度超过10500,java,android,android-edittext,Java,Android,Android Edittext,我在调用EditText.setSelection()时遇到此异常 N可以是任何数字。例如,如果我调用setSelection(1047610568)N将是10568。但是10500是常数 java.lang.IndexOutOfBoundsException: setSpan (10568 ... 10568) ends beyond length 10500 at android.text.SpannableStringBuilder.chec

我在调用
EditText.setSelection()时遇到此异常

N可以是任何数字。例如,如果我调用
setSelection(1047610568)
N将是10568。但是
10500
是常数

          java.lang.IndexOutOfBoundsException: setSpan (10568 ... 10568) ends beyond length 10500
              at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1090)
              at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:665)
              at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:658)
              at android.text.Selection.setSelection(Selection.java:78)
              at android.widget.EditText.setSelection(EditText.java:91)
...
EditText
是否存在导致此问题的任何限制

在我做选择之前,我加载一个文本文件,其中肯定包含10500多个字符,因为它包含大约12000行。然后我调用
EditText.setText()
将文件内容放入字段中
EditText.setText()
工作时没有任何问题。
首先,我认为文件内容有问题,但我加载了另一个文件,当选择发生时,我得到了相同的异常,它包含的
长度超过10500

这是
android.text.SpannableStringBuilder
中的实际方法,其中代码失败

private void checkRange(final String operation, int start, int end) {
    if (end < start) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " has end before start");
    }

    int len = length();

    if (start > len || end > len) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " ends beyond length " + len);
    }

    if (start < 0 || end < 0) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " starts before 0");
    }
}
private void checkRange(最终字符串操作,int start,int end){
如果(结束<开始){
抛出新IndexOutOfBoundsException(操作+“”+
区域(开始,结束)+“开始前有结束”);
}
int len=长度();
如果(开始>镜头| |结束>镜头){
抛出新IndexOutOfBoundsException(操作+“”+
区域(起点、终点)+“超出长度的终点”+长度);
}
如果(开始<0 | |结束<0){
抛出新IndexOutOfBoundsException(操作+“”+
区域(开始,结束)+“在0之前开始”;
}
}
您的开始/结束似乎大于编辑文本中的长度(由
length()
)计算)。可能是截断的情况


EditText所能容纳的字符数不受Android操作系统的限制,但可能来自设备。请参见,也请参见

我在使用AutoCompleteTextView时遇到了这样的问题。问题是自动完成窗口会延迟打开。如果在此延迟期间删除了文本,则当您尝试打开窗口时,弹出窗口将尝试处理已删除的文本。避免这种情况的唯一方法是取消打开此窗口。这可以通过从此视图的处理程序中删除所有操作来完成。
autoCompleteTextView.getHandler().removeCallbacksAndMessages(null)

看起来最大文本视图(EditText)长度有限制。有一个很奇怪,但将如此长的文本设置为TextView肯定不是一个好主意。可能10500是系统的内存限制。检查此项:@VladMatvienko EdiText实现此功能的替代方案是什么?同样,setText()也可以工作。如果有限制,那么在那一刻失败是合乎逻辑的,而不是等到调用setSelection()。文本可能会被截断为设备可以支持的任何内容。您的案例中包含10500个字符。解决方案可以是将文本拆分为较小的文本块,并在列表视图中使用多个文本视图。在将文本长度设置为文本视图后,是否检查了文本长度?它是原始的还是10500?截断的规则是什么?它在什么地方被记录下来了吗?看起来Android操作系统并没有限制,但很可能来自设备。请参阅,我还建议使用简单的webview。使用html字符串。谢谢。但将来可能需要编辑文本。我通过您提供的一个链接用android:maxLength=“1000000”解决了这个问题。然而,我不喜欢它,认为它是一个临时解决方案。最好是放置文本块并只填充文本字段的可见区域。我不知道EditText是否提供了一些机制来完成这项工作,或者它是委托给应用程序开发人员的。很高兴我能提供帮助。web视图在您的情况下不起作用吗?
private void checkRange(final String operation, int start, int end) {
    if (end < start) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " has end before start");
    }

    int len = length();

    if (start > len || end > len) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " ends beyond length " + len);
    }

    if (start < 0 || end < 0) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " starts before 0");
    }
}