【问题标题】:IndexOutOfBoundsException setSpan (34 ... 48) ends beyond length 34IndexOutOfBoundsException setSpan (34 ... 48) 结束超过长度 34
【发布时间】:2018-07-12 15:39:34
【问题描述】:

我有一个崩溃报告指出IndexOutOfBoundsException,但我不知道是什么原因造成的,因为堆栈中没有我的代码中的任何内容。这是堆栈:

Fatal Exception: java.lang.IndexOutOfBoundsException: setSpan (34 ... 48) ends beyond length 34
       at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1265)
       at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:684)
       at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677)
       at android.widget.Editor$SuggestionsPopupWindow.updateSuggestions(Editor.java:3980)
       at android.widget.Editor$SuggestionsPopupWindow.show(Editor.java:3833)
       at android.widget.Editor.replace(Editor.java:435)
       at android.widget.Editor$3.run(Editor.java:2359)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6776)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

我发现的唯一与我的问题相似的是this,但那个人无法解决它。

我怎样才能知道是什么原因造成的,以便寻找解决方案?

编辑

好的,所以我在我的大代码的多个部分中发现了这个函数:

public static Spannable spannabletext(String message, int start, int end, String font_family, Typeface font) {

    Spannable spannable = new SpannableString(Html.fromHtml(message));
    spannable.setSpan(new CustomTypefaceSpan(font_family, font),
            start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

    return spannable;

}

所以我猜想这就是问题所在。但是由于我不想花费数小时试图猜测是哪个文本和哪种语言(我的应用程序使用 8 种不同的语言)是这个崩溃产生的,所以我要等到它再次发生,但这次我添加了一些Crashlytics 行,以便我可以从崩溃报告中获取更多信息。所以我的spannabletext函数现在是这样的:

public static Spannable spannabletext(String message, int start, int end, String font_family, Typeface font, Activity activity) {

    Crashlytics.setString("activity", activity.getLocalClassName());
    Crashlytics.setString("message", message);
    Crashlytics.setInt("start", start);
    Crashlytics.setInt("end", end);

    Spannable spannable = new SpannableString(Html.fromHtml(message));
    spannable.setSpan(new CustomTypefaceSpan(font_family, font),
            start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

    return spannable;

}

我会及时通知你..

【问题讨论】:

  • 带问题分享你的代码
  • 这就是我不知道要分享什么代码的事情,因为我不知道是什么原因造成的。 Crashlytics 向我报告了该错误。 @NileshRathod
  • 您的字符串中有 34 个字母,但您在代码中传递了超过 34 个字母,请检查您添加 SpannableString 的位置并检查字符串长度并相应更改代码
  • @RakshitNawani 是的,你是对的
  • @Mauricio 没有其他人只能猜测的代码的 sn-p。

标签: java android


【解决方案1】:

错误不是由您的代码引起的。查看堆栈:at android.widget.Editor$SuggestionsPopupWindow.updateSuggestions(Editor.java:3980),在长按文本以显示 PopWindow 时发生。所以这是一个框架错误,不是你的。

这个答案更好:EditText crashing on clearing text

问题是“updateSuggestions”在您更改 EditText 中的文本后尝试 setSpan。因此,您需要在编辑器修改 EditText 后进行文本更改。只需将您的代码放入 view.post

mEditText.post {
   mEditText.setText("your text")
}

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 2015-12-28
    • 2012-01-25
    • 2017-12-22
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多