话说 已经很久没写博客了,心思都放在其他地方上面去了,但是还是要记录一下工作中出现的bug记录
这次公司里的项目出现了一个很奇怪的bug,在6.0或者7.0甚至8.0都不会出现次bug,但是在5.0以下的手机,这里指的是4.0的手机,毕竟市面上4.0以下的手机已经很少了。
话不多少直接看AS报的错误。
java.lang.ArrayIndexOutOfBoundsException: length=29; index=-1
我来个去,看错误日志很明显是数组越界,但是我代码里明明没有数组.也没有用到LIst啊,所以我一步步分析,定位到了一个TextView设置String的时候出错了
我当时就想设置一个String 也能报错?
因为我们的公司的协议用了protbuff里面有个字符 ByteString
但是java中没有这个字符,所以必须要转String。
我原以为是ByteString转String出错了,但是我一看打印日志,打印的String是正常字符串。
这就有点奇怪了。。。。
后面我看我其他代码TextView设置String也是用ByteString转String 没有任何问题,所以我就想一下是不是布局出了问题
后面一试,果然如此
<TextView
android:singleLine="true"
android:id="@+id/txt_sensor_name"
android:layout_width="158dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/img_sensor_type"
android:ellipsize="middle"
android:maxLines="1"
android:textColor="@color/font_dark_gray"
android:textSize="15sp"/>
我这里的代码设置了固定宽度,因为字体过长了,所以加了maxLInes=1还有ellipsize=middle
但是我没加singleLine=true它就报以上那个错误,加了就可以了
原理分析,singleLIne=true 已经废弃了 但是不知道是在什么版本废弃了,但是在4.0的手机上还是起作用的,如果你要兼容到4.0的手机 并且字体过长的话 一定要加上这个。