我有以下绑定方法:
override fun onBindViewHolder(holder: bomViewHolder, position: Int) {
val color=ListTheColorTone[position].color
holder.cardBlack.setCardBackgroundColor(Color.parseColor(color!!))
}
调用时,我得到以下错误:
java.lang.StringIndexOutOfBoundsException: length=0; index=0
at java.lang.String.charAt(Native Method)
at android.graphics.Color.parseColor(Color.java:1384)
at com.example.wallpaperapp.Adapter.colortoneAdapter.onBindViewHolder(colortoneAdapter.kt:33)
at com.example.wallpaperapp.Adapter.colortoneAdapter.onBindViewHolder(colortoneAdapter.kt:15)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline (RecyclerView.java:6012)
当我手动插入字符串到parseColor
中时就不会发生这种情况,例如parseColor("#ffffff");
就可以正常工作。
以下是截图供参考:
1条答案
按热度按时间9jyewag01#
StringIndexOutOfBoundsException
是一个未选中的异常,当试图访问索引为负或大于字符串长度的字符串字符时,会发生该异常。由String方法引发,以指示索引为负或大于字符串的大小。对于某些方法(如charAt方法),当索引等于字符串的大小时也会引发此异常。
因此,某个地方的某个东西试图访问索引为负或大于字符串长度的字符,如果我们查看堆栈跟踪,我们可以看到异常是从
Color.parseColor
方法抛出的:因此,
Color.parseColor
获取一个空(""
)字符串作为参数,我们可以看到颜色来自一个名为ListTheColorTone
的集合:这对我们意味着什么?
ListTheColorTone
集合可能在传递的position
中缺少一个元素,或者应用程序中的某些其他逻辑不正确。正如@Zabuzard建议的那样,尝试打印position
的值(或者集合的内容)以了解问题所在:或者更好的方法是,尝试在抛出异常的那一行添加一个断点,并检查
position
和ListTheColorTone.size
的值。