gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:43:06 30 4
gpt4 key购买 nike

通过简单地将 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com