IndexOutOfBoundsException setSpan(34 ... 48)超过长度34

时间:2018-02-02 07:17:30

标签: java android

我有一个崩溃报告,指出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;

}

我会让你发布..

2 个答案:

答案 0 :(得分:0)

您可能尝试在EditText中设置文本,其中限制/长度的长度短于您尝试设置的字符串的长度。尝试限制输入的字符串的长度。 追踪的最后一行清楚地说明了这一点。

答案 1 :(得分:0)

该错误不是由您的代码引起的。查看堆栈: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")
}