android - 使用 ArrayIndexOutOfBoundsException 将 TextView 文本设置为静态文本崩溃(很少)

标签 android kotlin indexoutofboundsexception

通过简单地将 TextViews 文本设置为在代码中定义的字符串(永远不能是 null)我有时会得到一个 ArrayIndexOutOfBoundsException,这只发生在我的实时应用程序中,我从来没有在任何测试设备上遇到过这个问题......而且它似乎只是有时会发生,用户告诉我它发生一次,下次一切正常。有什么想法可能是这里的原因吗?对我来说,看起来这种崩溃永远不会发生......

代码

我做以下事情:

fun updateFilterInfo(showing: Int, total: Int) {
    binding?.tvFilterLvl1?.text = "$showing / $total" // <= THIS line creates the crash
}

崩溃

而且我时不时地(很少)遇到以下崩溃:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at android.text.SpannableStringBuilder.getSpansRec(SpannableStringBuilder.java:973)
at android.text.SpannableStringBuilder.getSpans(SpannableStringBuilder.java:866)
at android.text.SpannableStringBuilder.getSpans(SpannableStringBuilder.java:836)
at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:1268)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:773)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:672)
at android.widget.TextView.setText(TextView.java:5981)
at android.widget.TextView.setText(TextView.java:5849)
at android.widget.TextView.setText(TextView.java:5806)
... above line of my code ...

版本/背景

我正在使用 android x,最新的稳定版本并且有这个问题......我也使用 kotlin 1.3.21 和 Gradle 插件 3.3.2 - 所有这些稳定且大部分是最新版本。另外,我确保用户不使用自定义 ROM,所以它也不可能是这样。

XML/主题

受影响的 View 非常简单,如下所示:

<TextView
    android:id="@+id/tvFilterLvl1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:padding="4dp" />

这里没有自定义样式,我的项目中没有自定义字体(尽管永远不能排除系统范围的自定义字体)。我的基本应用主题没有定义自定义 TextView 样式并扩展了 Theme.MaterialComponents.Light.DarkActionBar.Bridge。所以 XML 和主题都没有任何特殊的 TextView 处理......

编辑 1 - 我将值提取到局部变量

fun updateFilterInfo(showing: Int, total: Int) {
    val text = "$showing / $total"
    binding?.tvFilterLvl1?.text = text
}

我仍然遇到如下崩溃:

java.lang.NullPointerException: Attempt to invoke interface method 'void android.text.SpanWatcher.onSpanAdded(android.text.Spannable, java.lang.Object, int, int)' on a null object reference
    at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:1228)
    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:767)
    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677)
    at android.text.DynamicLayout.<init>(DynamicLayout.java:187)
    at android.widget.TextView.makeSingleLayout(TextView.java:6907)
    at android.widget.TextView.makeNewLayout(TextView.java:6805)
    at android.widget.TextView.checkForRelayout(TextView.java:7341)
    at android.widget.TextView.setText(TextView.java:4482)
    at android.widget.TextView.setText(TextView.java:4339)
    at android.widget.TextView.setText(TextView.java:4314)
    .... the line above: binding?.tvFilterLvl1?.text = text

最佳答案

试试

fun updateFilterInfo(showing: Int, total: Int) {
  binding?.tvFilterLvl1?.let {
    text = "$showing / $total"
  }
}

关于android - 使用 ArrayIndexOutOfBoundsException 将 TextView 文本设置为静态文本崩溃(很少),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201891/

相关文章:

android - 无法在 Anko 中预览

java - 在 Kotlin/Android 中的 WebView 中搜索字符串

java - Test2 数组初始化错误

android - 如何将 ListView 中的每个项目与数据库中的 id 相关联

android - 为所有应用使用 1 个 admob 发布者 ID 或为每个应用使用多个 ID 哪个更好?

java - 构建应用程序时出错无法删除/output.json?

c# - 索引越界 c#(我正在尝试添加 savegame 并使用 WriteAllLines)

android - 在 android studio 2.2.3 中找不到 DDMS

dependencies - 在 kotlinc 终端中导入依赖库

Java ArrayList 抛出 IndexOutOfBoundsException。为什么?