通过简单地将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/theme
受影响的视图非常简单,如以下内容:
<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"
}
}