【问题标题】:IndexOutOfBoundsException for setSpan - outside my application codesetSpan 的 IndexOutOfBoundsException - 在我的应用程序代码之外
【发布时间】:2015-01-12 22:12:28
【问题描述】:

我最近发布了对我的 Android 应用程序的更新,并且收到了大量的崩溃报告,其中包含以下堆栈。我很茫然,因为堆栈中绝对没有我的代码,所以我不知道如何解决这个问题。有没有人见过这个错误?我能做些什么来解决或调试它?

java.lang.IndexOutOfBoundsException: setSpan (0 ... 11) ends beyond length 0
   at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1016)
   at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:592)
   at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
   at android.widget.TextView.setSpan_internal(TextView.java:8610)
   at android.widget.Editor$SuggestionsPopupWindow.onItemClick(Editor.java:2902)
   at android.widget.AdapterView.performItemClick(AdapterView.java:298)
   at android.widget.AbsListView.performItemClick(AbsListView.java:1128)
   at android.widget.AbsListView$PerformClick.run(AbsListView.java:2812)
   at android.widget.AbsListView$1.run(AbsListView.java:3571)
   at android.os.Handler.handleCallback(Handler.java:725)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:153)
   at android.app.ActivityThread.main(ActivityThread.java:5299)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
   at dalvik.system.NativeStart.main(NativeStart.java)

编辑:从堆栈中,它看起来正在通过 ListView -> itemClick -> 然后尝试使用 TextView 做某事。我确实有多个带有 textViews 的可点击 listViews……我可以在 textViews 上设置一个属性来阻止这种情况发生吗?

【问题讨论】:

  • 这是在 Android 4.1 和 4.1.1 上吗?在这个 Android 版本中有一个非常“著名”的错误。您是否在代码中将任何跨度与 MetricSpan 一起用作超类?
  • 到目前为止的 Android 4.2.2 和 4.4.2。我的代码中根本没有使用任何 Span(甚至不知道它们是什么......)。
  • 看起来像一个启用了建议的 EditText。看到这个非常相似的问题:code.google.com/p/android/issues/detail?id=29508
  • @hatem87 - 您发布的链接的堆栈看起来不同。我的不使用 NumberPicker。

标签: java android


【解决方案1】:

我认为您的字符串中有空格,您有 11 个空格字符串,但没有字符,因此实际/修剪长度为零,这将导致设置选择错误。您可以在设置选择位置之前检查 myString.trim().lenght() > 0。

【讨论】:

    【解决方案2】:

    使用suggestions纠正错字时,先调用Editor#replaceWithSuggestion,然后再调用TextView#setSpan_internalsetCursorPosition_internal,但是这里没有判断maxLength,所以崩溃了。

    谢谢环。以下解决了我的问题。我扩展了 EditText 并覆盖了以下方法,

    protected void setSpan_internal(Object span, int start, int end, intflags) {
            final int textLength = getText().length();
            ((Editable) getText()).setSpan(span, start, Math.min(end, textLength), flags);
        }
    
    protected void setCursorPosition_internal(int start, int end) {
        final int textLength = getText().length();
        Selection.setSelection(((Editable) getText()), Math.min(start, textLength), Math.min(end, textLength));
    }
    

    发件人:https://issuetracker.google.com/issues/36944935#comment5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2015-12-28
      • 2020-11-10
      • 2021-12-26
      • 1970-01-01
      • 2018-07-12
      • 2020-05-31
      相关资源
      最近更新 更多