【问题标题】:SpannableStringBuilder: indexOutOfBoundsException setSpan ends beyond length 0SpannableStringBuilder:indexOutOfBoundsException setSpan 结束超过长度 0
【发布时间】:2012-01-25 23:37:49
【问题描述】:

我在安卓系统中工作。我有个问题。当我第二次单击文本框时,我的应用程序崩溃了。

这是我的 Logcat 消息:

java.lang.IndexOutOfBoundsException: setSpan (4 ... 4) ends beyond length 0
android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:943)
android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:522)
android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:514)
android.text.Selection.setSelection(Selection.java:74)
android.text.Selection.setSelection(Selection.java:85)
android.text.method.ArrowKeyMovementMethod.onTouchEvent(ArrowKeyMovementMethod.java:410)
android.widget.TextView.onTouchEvent(TextView.java:6715)
android.widget.EditText.onTouchEvent(EditText.java:190)
android.view.View.dispatchTouchEvent(View.java:3766)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1731)
com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1120)
android.app.Activity.dispatchTouchEvent(Activity.java:2086)
com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1715)
android.view.ViewRoot.handleMessage(ViewRoot.java:1787)
android.os.Handler.dispatchMessage(Handler.java:99)

请帮我找出这个问题的原因。 提前谢谢你。

【问题讨论】:

  • 我有同样的问题,当焦点在 Edittext 时扫描条形码。
  • 没有看到任何代码,我们无法找到解决方案。正如您的 logcat 在第一行中所说,这是一个大小问题。我不明白你是如何在问题中获得 5 分和 1 星的,因为这个问题做得不好而且很不清楚
  • 你能用你的 EditText 发布你的 xml 布局吗?

标签: android


【解决方案1】:

setSpan (4 ... 4) 结束于长度 0,这意味着您有一个 4 个空白字符串,其实际/修剪长度为零,将选择设置为此将导致 IndexOutOfBoundsException,您应该在设置之前检查修剪长度选择

【讨论】:

    【解决方案2】:

    您可以在启动文本框后添加以下代码(编辑文本等)

    editText.setSaveFromParentEnabled(false);
    editText.setSaveEnabled(true);
    

    有关这方面的更多文档,您可以阅读以下文档:

    【讨论】:

      【解决方案3】:

      您还没有解释您的代码。所以很难解决你的问题。

      查看this 博客。它可能会帮助你。该博客介绍了时间选择器问题。这同样适用于 EditText 和 TextView。

      setSaveFromParentEnabled(false) & setSaveEnabled(true) 应该可以解决问题。

      tp = (TimePicker) findViewById(R.id.timePickerComponent);
      //two lines to add after
      tp.setSaveFromParentEnabled(false);
      tp.setSaveEnabled(true);
      

      【讨论】:

        【解决方案4】:

        您的问题的原因是以下错误: java.lang.IndexOutOfBoundsException: setSpan (4 ... 4) ends beyond length 0

        显然您正在为某物设置跨度,但文本字段为空,给出IndexOutOfBoundsException,请在调用 setSpan 之前检查输入字符串的长度。

        编辑:

        只是一个简短的说明,IndexOutOfBoundsException 始终意味着您正在尝试访问超出数组实际长度的数组的一部分。字符串对象被定义为字符数组。因此,当您尝试做某事但字符串的长度等于 0 时,您实际上最终超出了数组的边界。

        【讨论】:

        • 当用户从 EditText 的建议中选择文本时也会发生这种情况。最大长度属性已启用。
        猜你喜欢
        • 2015-12-28
        • 2017-12-22
        • 2018-07-02
        • 2018-07-12
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        相关资源
        最近更新 更多